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