Страницы

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

среда, 22 января 2020 г.

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

#многопоточность


Хочу уточнить некоторые моменты


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


Буду рад ссылкам, проясняющим эти моменты, возможно я чего-то сам не нашел.

p.s. возможно стоит изменить вопрос: fiber отличается ли от концепции task-based
параллелизма?
    


Ответы

Ответ 1



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

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

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