Dobrý den, děkuji za úvod do gorutin. Jen stále nemám jasno jaký je vztah mezi gorutinou a vláknem (ve významu pthread? Minule mi otloukli o hlavu, že jsem nepochopil gorutiny. Existuje-li však 1:1 mapování mezi vláknem a gorutinou, tak to je asi tak to samé jako new Thread("", () -> můjkód).start() v Javě. Kde tedy leží to kouzlo efektivity? Děkuji.
Vztah mezi gorutinami a vlákny je typu M : N, to znamená že runtime mapuje M gorutin do N vláken. By default Go runtime alokuje tolik vláken, kolik mu operační systém řekne, že je k dispozici CPU (lze samozřejmě změnit).
N se na běžných počítačích pohybuje v jednotkách, u M nejsou problém desetitisíce i víc. Velice jednoduché, rychlé a paměťové nenáročné přepnutí kontextu mezi gorutinami je také důvodem, proč má Go jinou volací konvenci, než je zvykem u jiných programovacích jazyků, což zase zvyšuje složitost použití třeba C knihoven.