Дополнительные средства многопоточной обработки, внедренные в версии .NET Framework 4.0
В версии .NET Framework 4.0 внедрен ряд новых средств многопоточной обработки, которые могут оказаться весьма полезными. Самым важным среди них является новая система отмены. В этой системе поддерживается механизм отмены потока простым, вполне определенным и структурированным способом. В основу этого механизма положено понятие
В класс
System. Threadingдобавлена структураSpinWait,предоставляющая методыSpinOnce () иSpinUntil , которые обеспечивают более полный контроль над ожиданием в состоянии занятости. Вообще говоря, структураSpinWaitоказывается непригодной для однопроцессорных систем. А для многопроцессорных систем она применяется в цикле. Еще одним элементом, связанным с ожиданием в состоянии занятости, является структураSpinLock,которая применяется в цикле ожидания до тех пор, пока не станет доступной блокировка. В классThreadдобавлен методYield,который просто выдает остаток кванта времени, выделенного потоку. Ниже приведена общая форма объявления этого метода.public static bool Yield
Этот метод возвращает логическое значение
true,если происходит переключение контекста. В отсутствие другого потока, готового для выполнения, переключение контекста не произойдет.Рекомендации по многопоточному программированию
Для эффективного многопоточного программирования самое главное — мыслить категориями параллельного, а не последовательного выполнения кода. Так, если в одной программе имеются две подсистемы, которые могут работать параллельно, их следует организовать в отдельные потоки. Но делать это следует очень внимательно и аккуратно, поскольку если создать слишком много потоков, то тем самым можно значительно снизить,.а не повысить производительность программы. Следует также иметь в виду дополнительные издержки, связанные с переключением контекста. Так, если создать слишком много потоков, то на смену контекста уйдет больше времени
ЦП, чем на выполнение самой программы! И наконец, для написания нового кода, предназначенного для многопоточной обработки, рекомендуется пользоваться библиотекой распараллеливания задач (TPL), о которой речь пойдет в следующей главе.Запуск отдельной задачи