Лекция: Многопоточность и параллелизм в .NET. Особенности.
Многопоточность в среде .NET Framework реализована следующим образом: существуют два типа потоков: высокоприоритетный и низкоприоритетный.
Высокоприоритетный(foreground) поток в отличии от низкоприоритетного (или фонового -background), назначается, как тип потока по умолчанию, а так же не будет остановлен, в том случае, если все высокоприоритетные потоки к его процессе будут остановлены.
Параллелизм означает управление количеством потоков, одновременно активных в некотором контексте InstanceContext. Управление осуществляется с помощью System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode с перечислением ConcurrencyMode.
Доступны следующие три режима параллелизма:
- Single: в каждом контексте экземпляра одновременно допускается максимум один поток, обрабатывающий сообщения в контексте экземпляра. Другие потоки, которым требуется использовать этот же контекст экземпляра, должны оставаться блокированными, пока исходный поток не выйдет из контекста экземпляра.
- Multiple: каждый экземпляр службы может иметь несколько потоков, параллельно обрабатывающих сообщения. Чтобы использовать этот режим параллелизма, реализация службы должна быть потокобезопасной.
- Reentrant: каждый экземпляр службы одновременно обрабатывает одно сообщение, но принимает вызовы операций с повторным входом. Служба принимает такие вызовы только при вызове через объект клиента WCF.
Использование параллелизма связано с режимом создания экземпляров. В режиме создания экземпляров PerCallпараллелизм не имеет значения, так как каждое сообщение обрабатывается новым контекстом InstanceContext и, следовательно, в контексте InstanceContext никогда не бывает активно несколько потоков.