Страницы

Поиск по вопросам

среда, 13 марта 2019 г.

чем отличаются green threads, task-based parallelilism от native threads?

Хочу уточнить некоторые моменты
Правильно ли я понимаю, что green threads это "эмуляция" нативных потоков с помощью корутин? например, генераторы в python или javascript это green threads? Правильно ли, что task-based параллелилизм это "эмуляция" потоков без создания своего стека? Если да, то как такое с нуля реализовать (сама идея).
Буду рад ссылкам, проясняющим эти моменты, возможно я чего-то сам не нашел.
p.s. возможно стоит изменить вопрос: fiber отличается ли от концепции task-based параллелизма?


Ответ

green thread - это реализация потоков на уровне приложения. То есть, с точки зрения операционной системы их нет. Поэтому, когда операционная система делает планирование переключения потоков, она не выделяет на каждый из них время. Если один зеленый тред заблокируюется в системном вызове - все заблокируется.
task-based параллелилизм - это когда мы создаем не треды (и мучаемся с их синхронизацией), а делаем мелкие задачи, которые приложение разбрасывает между тредами. Эти треды (потоки) входят в пул (набор) и их кол-во, запуск-останов полностью управляется приложением (фреймворком). При этом сами задачи об этом не знают. При мелких задачах можно получить хорошую производительность (относительно запуска потока на каждую мелкую задачу).
Генераторы в питоне вряд ли являются зелеными тредами. Хотя, это все зависит от того, как это все понимать.
Правильно ли я понимаю, что green threads это "эмуляция" нативных потоков
вот если так оборвать - то все ок.
корутины- это те же зеленые потоки. Но они могут быть и реальными потоками.
Правильно ли, что task-based параллелилизм это "эмуляция" потоков без создания своего стека?
нет. Это выполнение задач без понимая того, что есть вообще треды и сколько их. А при чем здесь стек - я не знаю. Может имелось ввиду стек потока?

Комментариев нет:

Отправить комментарий