Многонишковостта подобрява ли производителността? как?

Чувам всички да говорят за това как многопоточността може да подобри производителността. Не вярвам в това, освен ако няма нещо, което пропускам. Ако имам масив от 100 елемента и преминаването му отнема 6 секунди. Когато разделя работата между две нишки, процесорът ще трябва да премине през същото количество работа и следователно време, с изключение на това, че работят едновременно, но с половината от скоростта. Не трябва ли многонишковостта да го прави още по-бавен? Тъй като имате нужда от допълнителни инструкции за разделяне на работата?


person Valentin    schedule 08.03.2013    source източник
comment
Вижте този: stackoverflow.com/questions/2856239/   -  person Chris    schedule 08.03.2013
comment
Ако имате 4 процесора например (което е доста често срещано явление в днешно време, дори и в смартфоните) и вашата програма има само една нишка, тя ще има достъп само до 25% от наличните ресурси на процесора. Ако имате само един процесор, няма да има разлика.   -  person assylias    schedule 08.03.2013
comment
Значи не е възможно една програма с една нишка да използва всички ядра?   -  person Valentin    schedule 08.03.2013


Отговори (2)


За проста задача за итериране на 100 елемента с много нишки задачата няма да осигури полза от производителността.

Итериране на над 100 милиарда елемента и обработка на всеки елемент, след което използването на допълнителни процесори може да помогне за намаляване на времето за обработка. И по-сложните задачи вероятно ще доведат до прекъсвания поради I/O например. Когато една нишка спи и чака периферно устройство да завърши I/O (напр. запис на диск или натискане на клавиш от клавиатурата), други нишки могат да продължат работата си.

person suspectus    schedule 08.03.2013
comment
+1 за споменаване на I/O производителност - основната причина, поради която превантивните mutitaskers бяха създадени на първо място. - person Martin James; 08.03.2013
comment
Много настолни устройства не поддържат многопоточно използване. Например по-добрите дискове имат два неблокиращи канала: за четене и за запис. Това означава, че само една нишка може да пише наведнъж ефективно. Сървърният хардуер може да има множество канали: един диск може да има няколко SATA връзки или може да се използва в RAID. В този случай множеството нишки са по-ефективни. - person Pingwin Tux; 11.10.2014

За задачи, обвързани с процесора, при които имате повече от едно ядро ​​във вашия процесор, можете да разделите работата си върху всяко от процесорните си ядра. Ако имате две ядра, разделете работата на две нишки. По този начин нишките трябва да работят на пълна скорост. Нишките обаче са наистина скъпи за създаване, така че имате нужда от доста голямо натоварване, за да преодолеете първоначалните разходи за създаване на нишките.

Можете също да използвате нишки, за да подобрите видимата производителност (или отзивчивост) в интерактивно приложение. Изпълнявате тежки изчисления във фонова нишка, за да избегнете блокиране на взаимодействията с потребителския интерфейс. Вашите изчисления не завършват по-бързо, но приложението ви няма онези „зависвания“, които го карат да изглежда бавно и не реагира.

person Albin Sunnanbo    schedule 08.03.2013