Пул потоков в C#

Добавлен: 

пул потоков

Всякий раз, когда запускается C# поток, несколько сотен микросекунд тратится на организацию таких вещей, как новый стек локальных переменных. Снизить эти накладные расходы позволяет пул потоков, предлагая накопитель заранее созданных повторно используемых потоков. Организация пула потоков существенно важна для эффективного параллельного программирования и мелкомодульного параллелизма; пул потоков в C#, позволяет запускать короткие операции без накладных расходов, связанных с настройкой потока.

При использовании потоков из пула следует учитывать несколько моментов.

• Невозможность установки свойства Name потока из пула затрудняет отладку (хотя при отладке в окне Threads среды Visual Studio к потоку можно присоединить описание).

• Потоки из пула всегда являются фоновыми.

• Блокирование потоков из пула может привести к снижению производительности

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

Для выяснения, является ли текущий поток потоком из пула, предназначено свойство Thread.CurrentThread.IsThreadPoolThread.

Вход в пул потоков

Простейший способ явного запуска чего-либо в потоке из пула — это использование Task.Run

Task.Run (() => Console.WriteLine ("Hello from the thread pool"));

Так как до выхода версии .NET 4 понятие задачи не существовало, общепринятой альтернативой являлся вызов ThreadPool. QueueUserWorkltem:

ThreadPool.QueueUserWorkltem (notUsed => Console.WriteLine ("Hello"));

Чистота пула потоков

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

Среда CLR избегает превышения лимита в пуле потоков за счет постановки задач в очередь и настройки их запуска. Она начинает с запуска такого количества параллельных задач, которое соответствует числу аппаратных ядер, и затем регулирует уровень параллелизма по алгоритму поиска экстремума, непрерывно настраивая рабочую нагрузку в определенном направлении. Если производительность улучшается, CLR продолжает двигаться в том же направлении (а иначе — в противоположном). Это обеспечивает продвижение по оптимальной кривой производительности, даже при наличии соперничающих процессов на компьютере.

Стратегия, реализованная в CLR, работает хорошо в случае удовлетворения следующих двух условий:

• элементы работы являются в основном кратковременными (менее 250 миллисекунд, а в идеале менее 100 миллисекунд), так что CLR имеет много возможностей для измерения и корректировки;

• задания, которые большую часть своего времени являются заблокированными, не доминируют в пуле.

Блокирование является ненадежным, т.к. оно дает CLR ложное представление о том, что оно загружает ЦП. Среда CLR достаточно интеллектуальна, чтобы обнаружить это и скомпенсировать (за счет внедрения дополнительных потоков в пул), хотя это может сделать пул уязвимым к последующему превышению лимита. Это также может ввести задержку, поскольку CLR регулирует скорость внедрения новых потоков, особенно на раннем этапе времени жизни приложения (тем более в клиентских ОС, где она поддерживает низкое потребление ресурсов).

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

Не забываем оставлять комментарии и отзывы, нам важно ваше мнение!

А еcли статья Вам очень понравилась и Вы считаете, что она достойна внимания. Тогда просто поделитесь ею, в социальной сети:


Интересная рекламма:


Возможно вам будет интересно
Скачать бесплатно Apache OpenOffice 4.1.1 - бесплатный офисный пакет, который включает в себя текстовый процессор, таблицы, графический редактор, презентации, базы данных и редактор формул. Скачать бесплатно Dataram RAMDisk v3.5.130R24 – программа для создания виртуального диска в оперативной памяти (для ОС Windows) Самостоятельное продвижение сайта в поисковых системах

Добавление комментария

Имя -

E-mail -





Читать в Яндекс.Ленте

Яндекс.Метрика


Power by xDroid. Copyright © 2009 - 2016 VEB.name
Копирование информации только с обратной ссылкой
Время генерации страницы : 0.012 сек.