От: | Serginio1 | https://habrahabr.ru/users/serginio1/topics/ | |
Дата: | 15.07.23 18:56 | ||
Оценка: |
Green threads значительно превосходят встроенные потоки Linux-системы по времени активации потоков и синхронизации.
Встроенные потоки Linux имеют несколько более высокую производительность операций ввода-вывода и переключения контекста.
Когда green thread выполняет блокирующий системный вызов, блокируется не только этот поток, но и все потоки внутри процесса[4]. Чтобы избежать этой проблемы, green threads должны использовать асинхронные операции ввода-вывода, хотя данную сложность можно скрыть, порождая скрытые для пользователя потоки на каждую операцию ввода-вывода, которые объединяются с green thread.
Есть также механизмы, которые позволяют использовать собственные потоки и снизить накладные расходы на активацию и синхронизацию потоков:
[q]
Пулы потоков снижают затраты на порождение новых потоков за счет повторного использования ограниченного числа потоков[
Также, языки, исполняющиеся на виртуальных машинах, НО использующие native threads, могут использовать технику оптимизации — анализ побочных эффектов (Escape-анализ), чтобы избежать синхронизации блоков кода, когда это возможно[6].