Що таке потоки, і що вони роблять в процесорі?


27

Я переглядав статистику процесора Intel Pentium e5700 .

Він має два ядра та дві нитки. Що нитки роблять для процесора? Чи є якесь співвідношення між кількістю ядер і кількістю ниток? З якою метою нитки служать для системи загалом?


Це або кількість потоків, з якими CPU може оброблятись одночасно, або якась фальшива статистика, яку винайшов Intel.
digitxp

3
Проголосувавши за закриття як IMO, це занадто загально - хоча я завжди дуже вагаюся сказати "просто Google це", метою Super User (і подібних сайтів) є відповісти на реальні запитання, а не бути словником технічних термінів, які легко шукати в більш відповідних ресурсах.
Shinrai

3
@Shinrai Я відредагував це, щоб зробити його менш загальним
Саймон Шиган

Відповіді:


21

Основна кількість - це фізична кількість ядер в центральному процесорі, тоді як кількість потоків - це кількість окремих потоків додатків, які можуть виконуватися одночасно на самому процесорі. Без будь-якого додаткового чи спеціального обладнання це дорівнює основній кількості. Однак деякі процесори матимуть більше потоків, ніж вони мають ядра.

Деякі процесори Intel мають функцію під назвою hyperthreading , яка дозволяє операційній системі бачити подвійну кількість логічних ядер на фізичне ядро. Це дозволяє операційній системі планувати і запускати подвійну кількість потоків одночасно, тому у випадку з процесором, з яким я пов'язаний вище, є чотири фізичні ядра, але вісім логічних (тому ви можете запускати вісім потоків одночасно).

Кожна окрема програма, що працює в операційній системі, є або однопотоковою, або багатопотоковою (подумайте про кожен потік як про "підпрограму"). Для однопотокових програм потрібен лише один потік для запуску на процесорі, тоді як багатопотокові програми мають багато підрядків, що працюють одночасно. Додаткові сердечники або гіпер-нарізка дозволяють одночасно запускати більше ниток додатків.

Це дозволяє багатопотоковим ( не однопотоковим) програмам працювати набагато швидше, оскільки на центральному процесорі може працювати відразу кілька потоків.


Лише остаточне зауваження, гіперточення покращує продуктивність деяких багатопотокових додатків, спеціально оптимізованих для цього (оскільки фізичних ядер все ще є лише половина, наскільки є логічних). У деяких випадках різні програми можуть працювати швидше з технологією HyperThreading відключена (хоча багато програм роблять користь від нього). Незалежно від гіперточення, збільшення кількості фізичних ядер завжди буде корисним для багатопотокових програм.


1
Не могли б ви пояснити, що нитки роблять для процесора? +1 для згадки про гіперточність, проте, як це зараз дуже часто (здається, у всіх i3)
Саймон Шиган

Кожен процес має щонайменше одну нитку. Коли процес отримує свою чергу на процесорі, основний потік працює до тих пір, поки не завершиться його чергування процесора. Процес може породити інший потік, і тепер дві частини цього самого процесу будуть запущені і запитувати повороти процесора. Всі процеси - це програми, і за допомогою цього механізму дві речі в тій самій програмі можуть працювати відразу. Це швидше, ніж робити новий процес (тобто розгортати або завантажувати нову програму), але менш безпечно. Процеси ізольовані один від одного, нитки процесу - ні.
LawrenceC

Що робити, якщо я створив багатопоточну програму java з виконанням 50 одночасних потоків, і я запускаю її на Intel i7-4790K, який має 4 ядра та 8 потоків. Чи означає це, що лише 8 з цих 50 потоків у програмі java реально виконуються одночасно, а решта - у черзі? Як це працює
Донато

@Donato операційна система перериває будь-які запущені потоки, щоб дозволити іншим деякий час закінчити свою роботу. У будь-який момент у процесорі працює лише 8 потоків, і кожне ядро ​​постійно перемикається між різними потоками; корисно думати про них як про "робочі місця" (маючи на увазі, робочим місцям також можна призначити пріоритет). Кожне ядро ​​виконає певну роботу для заданого потоку, а потім його планувальник завдань операційної системи перериває, щоб перейти на іншу роботу, виконати деяку роботу над цим завданням і так далі і так далі, і по-четверте, поки завдання не буде завершено.
Прорив

@Breakthrough, Re " щоб ви могли запустити вісім ниток одночасно ", які обмеження такої одночасності порівняно з справжньою одночасністю, пропонованою окремими реальними ядрами? Крім того, як можливо, що " програми можуть працювати швидше з вимкненою гіперточкою "?
Pacerier

9

"Ядро" являє собою фактичний фізичний підмножина процесора, який сам по собі може обробляти обробку, тоді як "потік" - це кількість реальних процесів, якими може обробитись процесор одночасно. Intel розробила технологію, під назвою "гіпер-різьблення" ця методика дозволяє одному фізичному ядру (яке, як правило, може обробляти лише один потік за один раз), тепер мати можливість обробляти дві нитки одночасно.

Нитка - це завдання, з яким повинен впоратися процесор, для простого пояснення ви можете припустити, що кожна програма, яку ви відкриваєте (наприклад, фарба, блокнот, медіаплеєр), має власну нитку ... тепер це не означає, що ви можете відкривати лише 2 програми одразу, просто тому, що процесор і ОС працюють так швидко при "перемиканні потоків", щоб задовольнити потреби кожної програми, яку ви відкрили. Ви просто відчуєте кращі показники роботи з більшою кількістю ядер, оскільки тепер ви можете передати всю роботу більшій кількості основних процесорів.

Наприклад, мій робочий комп'ютер має в ньому i7. У i7 є 4 фізичні ядра, але кожне ядро ​​може виконувати "гіпер-різьблення", що дозволяє цьому процесору обробляти 8 потоків одночасно. Тож якщо я відкрию диспетчер завдань, я побачу 8 ящиків для шкали продуктивності процесора.

Загальне правило полягає в тому, що більше фізичних ядер краще, ніж більше ниток. Отже, якщо ви порівнювали процесори, які мали 4 ядра та 4 потоки, було б краще, ніж 2 ядра 4 потоку. Але чим більше потоків може обробити ваш процесор, тим краще він буде виконуватись під час багатозадачності, а для деяких дуже інтенсивних програм (редагування відео, CAD, CAM, стиснення, шифрування тощо) сам по собі буде використовувати більше одного ядра одночасно.


Що ви маєте на увазі під "ящиками"?
Pacerier


-1

клацаючи посилання в статті в IE або chrome, щоразу, коли ви клацаєте, ви створюєте нитку. чим більше ви натискаєте на посилання, тим більше ниток. у вас 4-ядерний процесор, у вас є до 8 потоків, ви можете відкрити 8 посилань, перш ніж у вас виникнуть проблеми. нехтуючи своїм підключенням до Інтернету. тому кожне ядро ​​охоплює два з тих посилань (ниток), які ви відкрили. ось ідея ІМО. якщо це комусь має сенс


Ні, це не те, що нитки знаходяться в контексті процесора або питання, яке було задано.
music2myear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.