Нитки: потоки ядра проти потоків, що підтримуються в ядрі, порівняно з потоками на рівні користувача?


9

Хтось знає, в чому різниця між ними?

Мені здається, що нитки ядра відповідають коду, який керує ядром (інтуїтивно), але я не впевнений у двох інших ...

Також, чи вважатиметься стандарт pthreads рівнем користувача та підтримує ядро, оскільки ви отримуєте доступ до бібліотеки, тоді як ядро ​​виконує планування / комутацію потоків?

Відповіді:


14

Термін "потоки ядра" можна використовувати для позначення фактичних потоків, які повністю працюють у просторі ядра, або він може посилатися на потоки простору користувача, призначені ядром. Термін "підтримувані в ядрі" потоки означає останні, потоки, які працюють у просторі користувача, але їм сприяє ядро, що зазвичай означає, що ядро ​​їх планує.

"Нитки на рівні користувача" зазвичай означають потоки, видимі в просторі користувача. Тобто те, що ви створюєте, коли ви називаєте функцію "створити нитку" свого стандарту нитки. Взагалі термін "нитка на рівні користувача" використовується для позначення потоку, створеного кодом програми, незалежно від того, як він реалізований системою. Це може бути чистий потік користувальницького простору з малою підтримкою ядра, або він може бути потоком, призначеним ядром.

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


що таке реалізація на Linux?
yati sagade

3
У всіх сучасних системах Linux (2.6 ядра чи новіших), про які я знаю, реалізація потоків за замовчуванням в системі - 1 на 1, кожен потік рівня користувача має відповідну KSE (сутність планування ядра - в основному, потік, запланований Ядро Linux). Ядро, яке ви створюєте за допомогою "pthread_create", буде заплановано безпосередньо ядром. У сучасних системах зазвичай використовується NPTL , в старих системах використовується LinuxThreads - вони обидва 1-в-1.
Девід Шварц

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

Під « 1 до 1» я маю на увазі, що кожного разу, коли ви викликаєте «pthread_create», створюється новий контекст, який планується ядром. У гібридному підході кількість контекстів, запланованих ядром, менше, ніж кількість створених потоків - ядро ​​планує один з цих контекстів, а потім потокове бібліотечне планування одного з потоків, створених додатком.
Девід Шварц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.