Suriken
03-01-2007, 15:53
Допустим, что есть N>>2 количество различных обработчиков, которые работают независимо и постоянно (без пауз), извлекая данные из общей области памяти. Работа каждого разработчика может быть разбита на дискретные шаги. Все вместе запущено в среде Windows на машине с >=2 процессорами. Система может работать на машинах с разным количеством процессоров и должна иметь архитектуру, более-менее подходящую для всех конфигураций.
Как оптимальнее с точки зрения быстродействия (шагов/единицу времени) организовать вызов обработчиков?
Вариант 1. Каждый обработчик имеет свой поток. Распределение процессорного времени осуществляется операционкой.
Вариант 2. Имеется общий поток, который выбирает шаги из очереди задач.
Вариант 3. Количество потоков = количеству процессоров, которые работают с общей очередью задач.
Вариант.... ?
Также надо учитывать всякие фоновые процессы операционной системы и пользовательского интерфейса. Пользовательский интерфейс основан на элементах Windows и его обработка (перерисовка, реакции, события) не могут быть выделены в обособленный процесс или задачу.
Как оптимальнее с точки зрения быстродействия (шагов/единицу времени) организовать вызов обработчиков?
Вариант 1. Каждый обработчик имеет свой поток. Распределение процессорного времени осуществляется операционкой.
Вариант 2. Имеется общий поток, который выбирает шаги из очереди задач.
Вариант 3. Количество потоков = количеству процессоров, которые работают с общей очередью задач.
Вариант.... ?
Также надо учитывать всякие фоновые процессы операционной системы и пользовательского интерфейса. Пользовательский интерфейс основан на элементах Windows и его обработка (перерисовка, реакции, события) не могут быть выделены в обособленный процесс или задачу.