Я розумію, що багатоядерний процесор може запускати кілька потоків одного і того ж процесу одночасно, використовуючи різні його ядра.
Чи може він також запускати декілька процесів одночасно (кожне ядро виконує різні процеси)?
Я розумію, що багатоядерний процесор може запускати кілька потоків одного і того ж процесу одночасно, використовуючи різні його ядра.
Чи може він також запускати декілька процесів одночасно (кожне ядро виконує різні процеси)?
Відповіді:
Що стосується операційної системи та додатків, то кожне ядро є окремим процесором і підпорядковується тим же правилам спорідненості , що й декілька процесорів.
На якому процесорі (будь то реальний, основний або гіпертокований) процес працює, повністю залежить від системи планування операційної системи. Саме ця система планування (під впливом налаштувань спорідненості ) визначає, де процес повинен запускатися і коли. Процеси та потоки можуть за бажанням перемикатися між процесорами та ядрами, як планувальник вважає за потрібне.
З моїх обмежених знань операційних систем я вважаю, що кожен процес має принаймні одну нитку, і саме ці потоки плануються, а не самі процеси. Процес просто містить інформацію про програму та потоки, які вона встановила. Таким чином, однопотокове додаток отримує таку ж обробку, як і багатопотокове додаток, але багатопотокове додаток може краще використовувати ресурси.
Наприклад, давайте припустимо, що у нас є два процеси з двома потоками кожного та однією потоковою програмою, всі працюють над двоядерним процесором (або подвійним процесором, тут немає значення)
Process A
|_Thread A-1
|_Thread A-2
Process B
|_Thread B-1
|_Thread B-2
Process C
|_Thread C
Кожен потік планується в усіх ядрах процесора, а завантаження врівноважується планувальником ОС.
Якщо ми перейдемо та встановимо спорідненість процесора для Process B, щоб обмежити його одним процесором, то всі потоки цього процесу також пов'язані з цим процесором і не працюватимуть на будь-якому іншому процесорі. Зробити те ж саме з Process C не призведе до реальних змін, оскільки він може працювати лише на одному процесорі за один раз.
Коротка відповідь:
Процеси та потоки (як у багатопотокових) - це структури на рівні ОС. Як тільки ви отримаєте достатньо низький рівень у плануванні, вони зникають, і у вас є лише купа ниток виконання черг, щоб отримати час виконання.