2010-03-06 5 views
1

отрывок из Managed Threading Best Practices на MSDN:Что такое многопотоковая парадигма?

Не контролировать выполнение рабочих потоков от основной программы (с помощью событий, например). Вместо этого создайте свою программу так, чтобы рабочие потоки несли ответственность за то, что она будет доступна, выполняя ее и уведомляя другие части вашей программы по окончании. Если ваши рабочие потоки не блокируются, подумайте о потоках пула потоков. Monitor .. ::. PulseAll полезен в ситуациях, когда блокируются рабочие потоки.

Я хочу знать, что это описывает, поэтому я могу искать базовые реализации, чтобы начать работать.

ответ

2

Что сниппет означает, что:

Предположим, у вас есть проблемы производитель-потребитель, для которого у вас есть потребительский поток. Если у вас есть выделенный поток (не ThreadPool), вы должны использовать вызов WaitHandle :: WaitOne, чтобы этот поток подождал, пока у вас есть что-то для обработки (возможно, в очереди процессов). Когда производитель будет заполнять очередь, он может вызвать WaitHandle :: Set(), чтобы уведомить вас о потоке, чтобы начать обработку очереди. WaitOne() предназначен для выделенных потоков, потому что будет дорого создавать новый выделенный поток каждый раз, когда вы хотите обработать очередь.

DoProcessQueue() 
{ 
    while(RUNTHREAD) 
    { 
     ... process queue items 

     waitHandle.WaitOne(); // will wiat here until producer thread calls Set() 
    } 
} 

Threadpool нить рекомендуется для небольших задач, так что если вы планируете использовать WaitOne(), то вы не должны использовать Threadpool тему, потому что ThreadPool является глобальным ресурсом, доступный для всех приложений и блокируя потоки пула не является хорошим вариантом ,

0

Звучит как рабочий бассейн.

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

Основной семантикой будет то, что MVar, или другое asynchronous channel.

0

Это звучит как децентрализованный подход «Агент».

«Традиционный» способ написания многопоточного кода немного похож на микроменеджмент на работе - босс передает всю работу, и ожидается, что все остальные ожидают, что он будет им предоставлен. Любая работа, которая должна быть передана между членами команды, передается через босса.

Подход, основанный на Агенте, подобен тому, чтобы все в команде искали и выполняли работу, передавая работу между членами команды по мере необходимости. Босс знает, что происходит, но имеет только роль исполнительного контроля.

Смежные вопросы