Есть ли какое-либо преимущество в использовании green threads / lightweight threads
по сравнению с простым циклом или последовательным кодом, если в обоих случаях используются только неблокирующие операции?
for i := 0; i < 5; i++ {
go doSomethingExpensive() // using golang example
}
// versus
for i := 0; i < 5; i++ {
doSomethingExpensive()
}
Насколько я могу судить
- зеленые потоки помогают избежать ада обратных вызовов при асинхронных операциях
- позволяют планировать M зеленых потоков на N потоках ядра
Но
- добавляется немного сложности и производительности, требующей планировщика
- упрощается взаимодействие между потоками, когда язык поддерживает это, а выполнение было разделено на разные процессоры (в противном случае последовательный код проще)