Size: a a a

Programming Offtop

2020 July 23

AE

Alexandr Emelyanov in Programming Offtop
Спор практики с цитатой из Вики
источник

AN

Alexander Nozik in Programming Offtop
Там не практика, там идея разная. Давно надо видос записать.
источник

AN

Alexander Nozik in Programming Offtop
Все руки не доходят. Заодно объяснить в чем отличие корутин от лума.
источник

AN

Alexander Nozik in Programming Offtop
Для того, чтобы почувствовать разницу достаточно посмотреть на flow.
источник

TP

Tim Plotnikov in Programming Offtop
Alexander Nozik
Вы можете сколько угодно цитаты приводить, но это не станет правдой. У потоков и корутин разная семантика. Их называют легковесными потоками для упрощения понимания отдельных аспектов.
В чем разница семантики?
Как я понимаю, оба приема (потоки, корутины) позволяют исполнить код не в той последовательности, в какой он указан в исходном коде.
источник

AE

Alexandr Emelyanov in Programming Offtop
Tim Plotnikov
В чем разница семантики?
Как я понимаю, оба приема (потоки, корутины) позволяют исполнить код не в той последовательности, в какой он указан в исходном коде.
В корутинах выполнение континуаций не привязано к потокам, к тому же они не блокируют потоки
источник

AN

Alexander Nozik in Programming Offtop
Поток - это блок кода, который выполняется независимо. Корутина - это как правило набор блоков, связанных между собой. У задачи в потоке как правило нет колбэка, поэтому чтобы получить результат, его надо где-то подождать. Простая корутина типа launch без suspension  point внутри похожа на поток, но у нее всегда есть callback. В общем случае корутины дают граф задач с инвертированной осью времени.
источник

AN

Alexander Nozik in Programming Offtop
Ближайший родственник корутин - CF, но и они не генерят потоки.
источник

TP

Tim Plotnikov in Programming Offtop
Alexander Nozik
Поток - это блок кода, который выполняется независимо. Корутина - это как правило набор блоков, связанных между собой. У задачи в потоке как правило нет колбэка, поэтому чтобы получить результат, его надо где-то подождать. Простая корутина типа launch без suspension  point внутри похожа на поток, но у нее всегда есть callback. В общем случае корутины дают граф задач с инвертированной осью времени.
Но это лишь детали реализации одной и той же задачи.
Для упрощения будем иметь ввиду один процессор.

Если вы запускаете поток, то создаётся новый стек вызовов и там вы исполняете свой код.
Как все знают, на одном ядре OS менеджмент ваши потоки и быстро между ними переключается, давая время поработать коду из другого потока.

Корутина это тоже блок кода, только вы не создаёте новый стек вызовов, а используете текущий (без переключения контекста). И ОС не шедулит выполнение, а вы делаете это сами. Вызов колбэка возвращает вас в то место стека вызовов где вы запустили корутину.

Да, работают они по разному, но решают точно одну и ту же задачу
источник

AN

Alexander Nozik in Programming Offtop
Tim Plotnikov
Но это лишь детали реализации одной и той же задачи.
Для упрощения будем иметь ввиду один процессор.

Если вы запускаете поток, то создаётся новый стек вызовов и там вы исполняете свой код.
Как все знают, на одном ядре OS менеджмент ваши потоки и быстро между ними переключается, давая время поработать коду из другого потока.

Корутина это тоже блок кода, только вы не создаёте новый стек вызовов, а используете текущий (без переключения контекста). И ОС не шедулит выполнение, а вы делаете это сами. Вызов колбэка возвращает вас в то место стека вызовов где вы запустили корутину.

Да, работают они по разному, но решают точно одну и ту же задачу
Задачи тоже разные. Потоки для параллельного программирования, корутины для асинхронного. Можно использовать одно для другого другое для первого, но основная цель разная.
источник

AN

Alexander Nozik in Programming Offtop
Если не верите, сделайте на потоках задачи, которые выполняются асинхронно, но не одновременно.
источник

TP

Tim Plotnikov in Programming Offtop
Alexander Nozik
Задачи тоже разные. Потоки для параллельного программирования, корутины для асинхронного. Можно использовать одно для другого другое для первого, но основная цель разная.
Потоки были созданы задолго до повсеместного использования многопроцессорности, поэтому утверждение что потоки для параллельного программирования (которое возможно только на нескольких процессорах) не верно
источник

AN

Alexander Nozik in Programming Offtop
Или посмотрите как некрасиво выглядит параллельная обработка в корутинах.
источник

TP

Tim Plotnikov in Programming Offtop
Какой значок у суперсета или сабсета?
источник

ML

Mikhail Levchenko in Programming Offtop
Tim Plotnikov
Какой значок у суперсета или сабсета?
Как буква с, только растянутая по горизонтали
источник

TP

Tim Plotnikov in Programming Offtop
Параллельность ⊆ асинхронность
источник

TP

Tim Plotnikov in Programming Offtop
Mikhail Levchenko
Как буква с, только растянутая по горизонтали
Спасибо))
источник

AN

Alexander Nozik in Programming Offtop
Tim Plotnikov
Параллельность ⊆ асинхронность
нет
источник

AN

Alexander Nozik in Programming Offtop
Это два разных подхода, которые частично пересекаются
источник

AN

Alexander Nozik in Programming Offtop
Паралельная обработка коллекций является синхронной
источник