Тема басейн в C #, потоци

Тема басейн в C #, потоци

Всеки път, когато стартирате C # нишка. няколкостотин микросекунди похарчени за организирането на такива неща като нова купчина от местните променливи. Намаляване на тези режийни позволява басейна нишка, като предлага магазин предварително изграден за многократна употреба потоци. организация конец басейн е от съществено значение за ефективното паралелно програмиране и дребнозърнест паралелизъм; нишка басейн в C #, позволява кратко операция пуск без режийните, свързани с изграждане на потока.

При използване на потока от басейна да разгледа няколко точки.

• невъзможност за монтаж свойства Наименование поток от отстраняване на грешки на басейна трудно (макар и при дебъгването прозорец Конци среда Visual Studio може да бъде прикрепен към описанието на потока).

• потоци от басейна винаги са на заден план.

• блокиране на потока от басейна може да доведе до незадоволителна работа

Възможно е да се свободно промените приоритета на нишката от басейна - когато потокът се връща към басейна, на оригиналния приоритет ще бъде възстановено.

За да се определи дали текущата поток поток от басейна, проектиран Thread.CurrentThread.IsThreadPoolThread собственост.

Най-простият начин за изрично старта нищо в потока от басейна - е използването на Task.Run

Task.Run (() => Console.WriteLine ( "Добре от басейна резба"));

Тъй като преди следващата версия на .NET 4, концепцията не съществува проблемът, обща алтернатива е да се обадите на ThreadPool. QueueUserWorkltem:

ThreadPool.QueueUserWorkltem (notUsed => Console.WriteLine ( "Добре"));

Чистотата на басейна на конеца

Тема басейна предлага друга функция, която е да се гарантира, че временно излишък изчислително интензивна работа няма да доведе до превишаване на процесора. Превиши границата на - състояние, при което има активен поток в навечерието на CPU ядра, а операционната система трябва да разпределят времето филийки потоци. Надхвърляне на ограничението вреди на работата, тъй като разпределението на времето за филийки изисква обширен контекст превключване, и може да доведе до недействителност на процесора кеш, които са станали от съществено значение да се гарантира ефективността на съвременните процесори.

В CLR избягва при надхвърляне на лимита в басейна на конец за сметка на задачи опашка и да персонализирате своя старт. Тя започва с началото на едновременни задачи, което съответства на броя на хардуерните ядки, а след това се настройва паралелизма на алгоритъма за търсене на екстремум, тунинг е непрекъснато натоварване в определена посока. Ако ефективността се подобрява, на CLR продължава да се движи в същата посока (и по друг начин - в обратното). Това гарантира насърчаването на оптимална работна крива, дори и при наличието на конкурентни процеси на компютъра.

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

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

• задачи, които голяма част от времето е блокиран, не доминират в басейна.

Блокирането е ненадеждна, защото той дава невярна представа на CLR е, че тя зарежда процесора. CLR среда е достатъчно интелигентен, за да открие това и да се компенсират (чрез въвеждане на допълнителни потоци в басейна), въпреки че това може да направи басейна на уязвимите за последващо превишаване на лимита. Той може също да се въведе забавяне, тъй като CLR контролира скоростта на въвеждане на нови потоци. особено на ранен етап от жизнения цикъл на приложението (особено в клиентската операционна система, която го поддържа ниско потребление на ресурси).

Поддържане чистотата конец басейн е особено важно, когато е необходимо да се използват в пълна степен процесора.