Знайте, Intuit, лекция, стрийминг

конец басейн

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

метод се използва за добавяне на члена на работа

Следният код илюстрират основните функции на басейна на конеца.

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

Ние уверя, че наистина всички работни елементи извършени басейн потоци (IsPoolThread знак е вярно). Като цяло, лечението участват само две нишки. За дадения код е възможно всички операционни елементи се обработват в една нишка басейн. Всички операционни елементи са едни и същи изходни стойности на индекса аз. на 10. Това се дължи на асинхронни започне работа елементи - основния поток продължава да обработва цикъл и увеличаване на стойността на индекса, а всъщност работни елементи все още не са изпълнени. За да предотвратите това, трябва да използвате отделни копия за всеки елемент.

Замяна на работа с басейн на ръчния труд с потока:

Извеждането на кодове ще бъде, както следва:

Всяка работа т преработени в собствената си нишка, която не е част от басейна. С индекса аз отново има проблеми, но те се срещат много по-рядко и не толкова ясно се проявяват - малко разнообразие в продукцията е все още там. Това се дължи на факта, че работата на добавяне делегат от своя страна, е много по-бързо, отколкото инициализация започнете нова тема. Макар че от второто повторение на потока се извършва стартирането на първата нишка вече е настроен да работи и да прочетете настоящата стойност на индекса. За да се гарантира работата на всеки поток с уникален код, трябва да използвате копия на индексите, които са създадени за всяка итерация:

Основният недостатък на работата с басейн, е липсата на очаквания механизъм завършване на работни елементи. Или трябва да използвате някои средства за синхронизация (например, сигнални съобщения ManualResetEvent. CountdownEvent синхрон модел), или споделени променливи.

Работното функции са прехвърлени на съобщението за тревога. Основната нишка блокиран в очакване на сигнал. Работата на потока след приключване генерира сигнал. В случай на множество нишки, можете да използвате множество съобщения и метод WaitHandle.WaitAll за очакване на сигнали от всички потоци.

Всяка операционна елемент работи със своя уникална сигнал обект. След приключване, обектът делегат определен сигнал. Основният поток от очакване на приключване на всички работни елементи.

  1. Какви са предимствата на работа директно по течението?
  2. Какви са основните проблеми на организацията на многонишкова?
  3. В някои случаи се работи с басейн на конци е по-ефективно, отколкото директна работа с потока?

упражнения

Прилагане нишка басейн по поръчка, която репликира функционалността на ThreadPool обект. Добавяне на нова група от методи, които го правят по-лесно да се работи и да направи контакт с басейн на по-информативно. Например, методите за чакане на течаща задачи; обобщена информация за задачите (брой нишки в преработвателни предприятия, времето за обработка).