Що таке пул потоків? Навіщо використовувати пули потоків? Як користуватися пулами потоків?
1. Що таке пул ниток?
Клас ThreadPool у .NET Framework надає пул потоків, який можна використовувати для виконання завдань, надсилання робочих елементів, обробки асинхронного введення/виведення, очікування від імені інших потоків та обробки таймерів. Отже, що таке пул потоків? Пул потоків фактично є «пулом», який зберігає об'єкти потоків і надає базові методи, такі як встановлення мінімальної/максимальної кількості потоків у пулі, чергування методів для виконання тощо. ThreadPool — це статичний клас, тому його можна використовувати безпосередньо без створення об'єктів.
2. Навіщо використовувати пули різьби? Які переваги?
Офіційний сайт Microsoft говорить таке: Багато додатків створюють велику кількість потоків, які сплять, очікуючи на подібні події. Є також багато тем, які можуть впадати у сплячку, щоб періодично прокидатися і опитувати інформацію про зміну або оновлену інформацію про стан. Пули потоків, які дозволяють ефективніше використовувати потоки через пул робочих потоків, керованих системою.
Простіше кажучи, кожен новий потік має займати пам'ять та інші ресурси, і з такою кількістю нових потоків багато з них перебувають у стані сплячання або чекають на звільнення ресурсів. Є багато потоків, які періодично виконують лише незначну роботу, наприклад, оновлення даних тощо, і це надто марнотратно для малювання, і рідко велика кількість потоків вибухає у реальному програмуванні і закінчується за короткий час. Тому була запропонована концепція потокових пулів. Якщо додаток робить ще один запит до пулу потоків, потік у стані очікування активується і виконує завдання без створення нового потоку, що значно економить витрати. Система автоматично знищує потоки лише тоді, коли кількість потоків досягне максимальної кількості потоків. Тому використання пулів потоків дозволяє уникнути великих витрат на створення та знищення, забезпечити кращу продуктивність і стабільність, а по-друге, розробники можуть зосередитися на інших завданнях, передаючи потоки системному менеджменту.
3. Як використовувати пули потоків?
Насправді, пули потоків дуже прості у використанні, а отже
a. Встановіть максимальний і мінімальний пул потоків:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Встановіть кількість запитів для пулу потоків, які можуть бути активними одночасно. Усі запити, що перевищують цю кількість, залишатимуться в черзі, доки не стане доступним потік пулу потоків. Ви також можете встановити мінімальну кількість потоків.
b. Додайте завдання до пулу потоків:
ThreadPool.QueueUserWorkItem(новий WaitCallback(назва методу));
або ThreadPool.QueueUserWorkItem(новий параметр WaitCallback(назва методу);
Наприклад, якщо максимум 5 потоків у пулі потоків виконує метод 60 разів, загальна зарплата за 5 років виглядає так:
Якщо ви не використовуєте пул потоків, можливо, доведеться відкрити 60 потоків для асинхронного виконання методу Run(), що є марною тратою ресурсів. Зараз ми використовуємо до 5 потоків, які можна виконати за 1 секунду, і ефективність та продуктивність дуже хороші.
|