Структура с диспетчером не единый путь организации многонитевой обработка. В модели "команда" все нити эквивалентные, каждая получает и обрабатывает свои собственные запросы. Иногда работы приходят, а нужна нить занята, особенно, если каждая нить специализируется на выполнении особого вида работ. В этом случае может создаваться очередь незавершенных работ. При такой организации нити должны сначала просматривать очередь работ, а потом почтовый ящик.

Нити могут быть также организованные в виде конвейера. В этом случае первая нить порождает некоторые дани и передает их для обработки такой нити и т.д. Хотя эта организация и не подходит для файла-серверу, для других задач, например, задач типу " производитель-потребитель", это хорошее решение.

Нити часто полезные и для клиентов. Например, если клиент хочет растиражировать файл на много серверы, он может создать по одной нити для копирования на каждом сервере. Другое использование нитей клиентами - это управления сигналами, такими как прерывания с клавиатуры (del или break). Вместо обработки сигнала прерывания одна нить назначается для постоянного ожидания поступления сигналов. Таким образом, использование нитей может сократить необходимое количество прерываний користувального уровня.

Рис. 3.10.  Три средства организации нитей в процессе:
а - модель диспетчер/рабочие нити; бы - модель "команда"; в - модель конвейера

Другой аргумент в пользу нитей не имеет отношения ни к отдаленным вызовам, ни к коммуникациям. Некоторые прикладные задачи легче программировать, используя параллелизм, например задачи типу " производитель-потребитель". Не настолько важно параллельное выполнение, как важная ясность программы. А поскольку они разделяют общий буфер, не стоит их делать отдельными процессами.

В конце концов, в многопроцессорных системах нити с одного адресного пространства могут выполняться параллельно на разных процессорах. С другой стороны, правильно сконструированные программы, которые используют нити, должны работать одинаково хорошо на однопроцессорной машине в режиме деления времени между нитями и на действительному мультипроцессоре.

 

Возможно стоит прочитать: