Я хотів би зрозуміти переваги цих типів потоків.
В якому середовищі зелені нитки кращі за незелені? Деякі вважають, що зелені нитки краще для багатоядерних процесорів.
Будь-які очікувані проблеми з поведінкою.
Я хотів би зрозуміти переваги цих типів потоків.
В якому середовищі зелені нитки кращі за незелені? Деякі вважають, що зелені нитки краще для багатоядерних процесорів.
Будь-які очікувані проблеми з поведінкою.
Відповіді:
Стаття Вікіпедії « Зелені нитки» це дуже добре пояснює.
Зелені нитки - це «нитки на рівні користувача». Вони заплановані "звичайним" процесом на рівні користувача, а не ядром. Тож їх можна використовувати для імітації багатопоточності на платформах, які не надають таких можливостей.
У контексті Java, зелені нитки залишилися в минулому. Див. Статтю JDK 1.1 для Посібника розробника Solaris . (Мова йде про Solaris, але той факт, що зелені нитки більше не використовуються, справедливий для звичайних платформ).
З випуску версії 1.3 зелені нитки були залишені в Sun JVM для Linux (див. Технологію Java [tm] на платформі Linux на archive.org). Це датується 2000 роком. Для Solaris рідні потоки були доступні з JDK 1.2. Це датується 1998 роком. Я навіть не думаю, що коли-небудь застосовувалася зелена нитка для Windows, але я не можу знайти посилання на це.
Є деякі винятки, як зазначається у статті Вікіпедії, я збираюся здебільшого для малопотужних (вбудованих) пристроїв.
Зелені потоки - це потоки, реалізовані на рівні програми, а не в ОС. Зазвичай це робиться, коли ОС не надає API потоку або він працює не так, як вам потрібно.
Таким чином, перевага полягає в тому, що ви взагалі отримуєте потокоподібну функціональність. Недоліком є те, що зелені нитки насправді не можуть використовувати кілька ядер.
Було кілька ранніх JVM, які використовували зелені потоки (IIRC робив порт Blackdown JVM для Linux), але сьогодні всі основні JVM використовують справжні потоки. Можливо, є деякі вбудовані JVM, які все ще використовують зелені нитки.
Пам'ять зеленого потоку виділяється з купи, а не має стек, створений для неї ОС. Це потенційно може дати на порядок або більше збільшення одночасних потоків. Як згадували інші люди, це не використало б переваги декількох процесорів автоматично, однак варіант використання зазвичай використовується для блокування вводу-виводу - наприклад, зелені потоки можуть дозволити вам обробляти 100 тис. Одночасних з'єднань на відміну від 10 тис.
Отже, іншими словами, зелені нитки краще використовувати для операцій, пов’язаних з введенням-виведенням, у певному масштабі.
Зелені потоки значно швидші, ніж власні потоки, коли мають більше активних потоків, ніж процесори.
Спочатку Java мала підтримку зелених потоків, але на відміну від більшості сучасних реалізацій зелених потоків вона не могла масштабуватися на декількох процесорах, що робило Java неможливою використовувати кілька ядер.
Потім Java видалила зелену різьбу, щоб покладатися лише на власні потоки. Це зробило Java Threads повільнішим за зелені нитки.
Зверніть увагу, що я конкретно не кажу про реалізацію Java зелених потоків, яка мала недоліки, оскільки вона, на відміну від інших наслідків зелених потоків, не може масштабуватися в багатоядерній або багатопроцесорній системі.
Зелені потоки - це потоки рівня користувача, а не потоки рівня ядра. Вони заплановані користувацькими бібліотеками, а не ядром. Ви можете мати власний механізм планування для планування потоків, а не покладатися на планувальник ОС.
Зелені потоки імітують багатопотокові середовища, не покладаючись на будь-які власні можливості ОС, і ними керують у просторі користувача, а не просторі ядра, що дозволяє їм працювати в середовищах, які не мають власної підтримки потоків.
Виконання:
На багатоядерному процесорі реалізації рідних потоків можуть автоматично призначати роботу кільком процесорам, тоді як реалізації зелених потоків зазвичай не можуть. Зелені потоки значно перевершують рідні потоки Linux за активацією та синхронізацією потоків.
Коли зелений потік виконує блокуючий системний виклик, блокується не тільки цей потік, але й усі потоки в процесі.
Зелені потоки не заплановані ОС.
Це означає, що планування для них відбувається в просторі користувачів і не обробляється ядром. Це означає, що зелені потоки зазвичай не можуть бути використані для використання всіх ядер процесора.
Для будь-якої основної платформи, на якій сьогодні працює Java (наприклад, x86 або x64), ви будете використовувати справжні потоки.
JAVA Multi-Threading реалізована двома моделями:
Модель Green Thread: Нитка, якою керує JVM, без використання базової підтримки ОС, називається Green Thread. Дуже мало ОС, як Sun Solaris, підтримують модель зелених ниток. Він застарілий і не рекомендується використовувати.
Рідна модель ОС: Потік, який керується JVM за допомогою базової ОС, називається рідною моделлю ОС. Усі ОС Windows забезпечують підтримку власної моделі ОС.