ні деякі типові помилки невірного використання паралелізму при написанні багатопотокового програми, а також способи уникнути цих помилок:
Як вже згадувалося раніше, розподіл по декількох потокам методів, які містять лише декілька ітерацій або паралельну обробку короткого циклу, не є доцільним. У даному випадку витрати, витрачені на організацію багатопоточності, що не будуть покривати заощаджений час. Більше того, переваги паралелізму значно обмежуються кількістю процесорів. При виконанні декількох потоків на одному процесорі швидкість виконання програми не збільшується. Найбільш загальним сценарієм, при якому може виникнути зайвий паралелізм, є вкладені цикли. У багатьох випадках краще виконати масштабування тільки зовнішнього циклу. Паралелізм слід використовувати обережно і розумно, не застосовуючи його при кожному зручному випадку, щоб не допустити уповільнення роботи програми. p align="justify"> Використовуючи метод Parallel.Invoke (), слід пам'ятати, що функція очікування завершення завдання вже включена в даний метод, і використання методів очікування в даній ситуації небажано, а часом і неприпустимо;
Необхідно пам'ятати, що при використанні циклів For () і ForEach () ітерації можуть виконуватися як паралельно, так і немає. Тому не можна створювати код, правильність виконання якого можлива лише при виконанні циклу паралельно або при дотриманні якоїсь послідовності виконання;
В. NET Framework велика частина статичних методів потокобезпечна, отже, вони можуть бути викликані з декількох паралельно виконуються потоків одночасно. Але слід звернути увагу, що діюча в даних ситуаціях синхронізація значно сповільнить виконання програми. Слід враховувати дані витрати;
Паралельне використання потокоопасних методів може призвести до пошкодження або втрати даних (іноді це залишається незаме тним, але втрата даних все одно відбувається). Слід намагатися уникати використання цих методів одночасно декількома потоками;
У додатках, що не використовують концепцію багатопоточності, часто відбувається взаємодія зі статичними змінними або полями класу. При використанні змінних такого типу декількома потоками синхронізація доступу до змінної може значно знизити продуктивність, до того ж є ймовірність стану гонки. Рекомендується уникати звернення до загальних змінним в паралельних циклах або по можливості максимально обмежити його. br/>
3. СТВОРЕННЯ багато-додатками В СЕРЕДОВИЩІ VISUAL STUDIO.NET
Для демонстрації роботи багатопоточності створимо багатопотокове застосування, яке займається скачуванням сайтів в декілька потоків. В якості вихідних даних - у нас буде виступати черга з URL сайтів, а на виході ми повинні отримати список викачаних HTML сторінок. При цьому у нас повинна бути можливість вручну задавати кількість потоків роботи програми, для того, щоб ми могли ...