Net, паралельне програмування

Ймовірно, найголовнішим серед нових засобів, впроваджених в версію 4.0 середовища .NET Framework, є бібліотека розпаралелювання завдань (TPL). Ця бібліотека удосконалить багатопоточний програмування двома основними способами. По-перше, вона спрощує створення і застосування багатьох потоків. І по-друге, вона дозволяє автоматично використовувати кілька процесорів. Іншими словами, TPL відкриває можливості для автоматичного масштабування додатків з метою ефективного використання ряду доступних процесорів.

Завдяки цим двом особливостям бібліотеки TPL вона рекомендується в більшості випадків до застосування для організації багатопотокової обробки.

Ще одним засобом паралельного програмування, впровадженим в версію 4.0 середовища .NET Framework, є паралельний мову інтегрованих запитів (PLINQ). Мова PLINQ дає можливість складати запити, для обробки яких автоматично використовується кілька процесорів, а також принцип паралелізму, коли це доречно.

Як стане ясно з подальшого, запросити паралельну обробку запиту дуже просто. Отже, за допомогою PLINQ можна без особливих зусиль впровадити паралелізм в запит.

Головною причиною появи таких важливих нововведень, як TPL і PLINQ, служить зростаюча значення паралелізму в сучасному програмуванні. В даний час багатоядерні процесори вже стали звичайним явищем. Крім того, постійно зростає потреба в підвищенні продуктивності програм. Все це, в свою чергу, викликало зростаючу потребу в механізмі, який дозволяв би з вигодою використовувати кілька процесів для підвищення продуктивності програмного забезпечення.

Але справа в тому, що в минулому це було не так-то просто зробити ясним і допускає масштабування способом. Змінити це положення, власне, і покликані TPL і PLINQ. Адже вони дають можливість легше (і безпечніше) використовувати системні ресурси.

Бібліотека TPL визначена в просторі імен System.Threading.Tasks. Але для роботи з нею зазвичай потрібно також включати в програму клас System.Threading, оскільки він підтримує синхронізацію і інші засоби багатопотокової обробки, в тому числі і ті, що входять в клас Interlocked.

Незважаючи на те що застосування TPL і PLINQ рекомендується тепер для розробки більшості багатопоточних додатків, організація многопоточной обробки на основі класу Thread. як і раніше знаходить широке поширення.

Застосовуючи TPL, паралелізм в програму можна ввести двома основними способами. Перший з них називається паралелізмом даних. При такому підході одна операція над сукупністю даних розбивається на два паралельно виконуваних потоку або більше, в кожному з яких обробляється якісь дані. Так, якщо змінюється кожен елемент масиву, то, застосовуючи паралелізм даних, можна організувати паралельну обробку різних областей масиву в двох або більше потоках. Неважко здогадатися, що такі паралельно виконуються дії можуть привести до значного прискорення обробки даних в порівнянні з послідовним підходом.

Незважаючи на те що паралелізм даних був завжди можливий і за допомогою класу Thread, побудова масштабованих рішень засобами цього класу вимагало чималих зусиль і часу. Ситуація змінилась з появою бібліотеки TPL, за допомогою якої масштабований паралелізм даних без особливих зусиль вводиться в програму.

Другий спосіб введення паралелізму називається паралелізмом завдань. При такому підході дві операції або більше виконуються паралельно. Отже, паралелізм завдань є різновидом паралелізму, який був би досягнутий в минулому засобами класу Thread. А до переваг, які обіцяє застосування TPL, відноситься простота застосування і можливість автоматично масштабувати виконання коду на кілька процесорів.

Бібліотека TPL дозволяє автоматично розподіляти навантаження додатків між доступними процесорами в динамічному режимі, використовуючи пул потоків CLR. Бібліотека TPL займається розподілом роботи, плануванням потоків, управлінням станом і іншими низькорівневими деталями. В результаті з'являється можливість максимізувати продуктивність додатків .NET. які мають справи зі складнощами прямої роботи з потоками. На малюнку показані члени нового простору імен .NET 4.0:

Net, паралельне програмування

Схожі статті