Какво е пул от нишки? Защо да се използват пулове с нишки? Как да използвам пулове с нишки?
1. Какво е пул от нишки?
Класът ThreadPool на .NET Framework предоставя пул от нишки, който може да се използва за изпълнение на задачи, изпращане на работни елементи, обработка на асинхронни I/O, изчакване от името на други нишки и обработка на таймери. Какво е пул от нишки? Пулът от нишки всъщност е "пул", който съхранява обекти от нишки и предоставя някои основни методи, като задаване на минималния/максималния брой нишки в пула, подреждане на опашката на методите за изпълнение и др. ThreadPool е статичен клас, така че може да се използва директно без създаване на обекти.
2. Защо да използвате пулове с нишки? Какви са ползите?
Официалният уебсайт на Microsoft казва следното: Много приложения създават голям брой нишки, които са в режим на сън, чакайки да се случат събития. Има и много теми, които могат да изпаднат в хибернация, само за да се събудят периодично и да потърсят информация за променена или актуализирана информация. Пулове от нишки, които ви позволяват да използвате нишките по-ефективно чрез пул от работни нишки, управлявани от системата.
С други думи, всяка нова нишка трябва да заема памет и други ресурси, а с толкова много нови нишки много от тях са в латентно състояние или чакат да бъдат освободени ресурси. Има много нишки, които извършват само малка работа периодично, като обновяване на данни и др., които са твърде разточителни за рисуване, и рядко голям брой нишки да избухнат в реалното програмиране и след това да приключат за кратко време. Затова беше предложена концепцията за пулове от нишки. Ако приложението направи нова заявка към пула на нишките, нишката в състояние на чакане се активира и изпълнява задачата без да създава нова нишка, което спестява много разходи. Системата автоматично ще унищожи нишките само когато броят на нишките достигне максималния брой нишки. Следователно, използването на пулове от нишки може да избегне големи разходи за създаване и унищожаване, да постигне по-добра производителност и стабилност, а второ, разработчиците могат да се съсредоточат върху други задачи, като предават нишките на управлението на системата.
3. Как да използвам пулове с нишки?
Всъщност пуловете от нишки са много лесни за използване, както следва
а. Задайте максималния и минималния пул от нишки:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Задайте броя на заявките за пул от нишки, които могат да бъдат активни едновременно. Всички заявки над този брой ще останат в опашка, докато нишката от пула на нишките не стане достъпна. Можеш също да зададеш минималния брой нишки.
b. Добавете задачи към пула с нишки:
ThreadPool.QueueUserWorkItem(ново WaitCallback(име на метод));
или ThreadPool.QueueUserWorkItem(нов параметър WaitCallback(име на метод);
Например, ако максимум 5 нишки в пула от нишки изпълняват даден метод 60 пъти, общата заплата за 5 години е следната:
Ако не използвате пулиране на нишки, може да се наложи да отворите 60 нишки, за да изпълните метода Run() асинхронно, което е загуба на ресурси за пространство. Сега използваме до 5 нишки, които могат да се изпълнят за 1 секунда, а ефективността и производителността са много добри.
|