Чувам всички да говорят за това как многопоточността може да подобри производителността. Не вярвам в това, освен ако няма нещо, което пропускам. Ако имам масив от 100 елемента и преминаването му отнема 6 секунди. Когато разделя работата между две нишки, процесорът ще трябва да премине през същото количество работа и следователно време, с изключение на това, че работят едновременно, но с половината от скоростта. Не трябва ли многонишковостта да го прави още по-бавен? Тъй като имате нужда от допълнителни инструкции за разделяне на работата?
Многонишковостта подобрява ли производителността? как?
Отговори (2)
За проста задача за итериране на 100 елемента с много нишки задачата няма да осигури полза от производителността.
Итериране на над 100 милиарда елемента и обработка на всеки елемент, след което използването на допълнителни процесори може да помогне за намаляване на времето за обработка. И по-сложните задачи вероятно ще доведат до прекъсвания поради I/O например. Когато една нишка спи и чака периферно устройство да завърши I/O (напр. запис на диск или натискане на клавиш от клавиатурата), други нишки могат да продължат работата си.
За задачи, обвързани с процесора, при които имате повече от едно ядро във вашия процесор, можете да разделите работата си върху всяко от процесорните си ядра. Ако имате две ядра, разделете работата на две нишки. По този начин нишките трябва да работят на пълна скорост. Нишките обаче са наистина скъпи за създаване, така че имате нужда от доста голямо натоварване, за да преодолеете първоначалните разходи за създаване на нишките.
Можете също да използвате нишки, за да подобрите видимата производителност (или отзивчивост) в интерактивно приложение. Изпълнявате тежки изчисления във фонова нишка, за да избегнете блокиране на взаимодействията с потребителския интерфейс. Вашите изчисления не завършват по-бързо, но приложението ви няма онези „зависвания“, които го карат да изглежда бавно и не реагира.