61
Vývoj / Re:NIO v Go
« kdy: 22. 03. 2017, 20:28:13 »Nevím, jestli jsem tu odpověď dobře pochopil (první část si podle mne odporuje se závorkou), ale na jednojádrovém stroji samozřejmě může běžet mnoho (klidně tisíce) gorutin. Go multiplexuje gorutiny do dostupného množství jader (lze omezit).asi že každá ta "sekvence" je ve vlastním vlákně (https://en.wikipedia.org/wiki/Go_(programming_language)#Concurrency)To by nebylo NIO, ale debilní implementace se samostatným vláknem na požadavek. V Go se obecně používá multiplex (NIO), i když je k dispozici jen jedno vlákno (na jednojádrovém procesoru nepoběží nikdy víc než jedna goroutina).
Spouštění gorutin pro příchozí požadavky je skryto ve standardní knihovně, která spouští gorutinu pro každé příchozí spojení. Ukázka v knihovně http třeba zde:
https://golang.org/src/net/http/server.go, poslední řádek funkce Serve (2668). Každá io operace pak přeplánuje gorutiny (kooperativní multitasking, podobně jako v node.js, ale pro více vláken a bez potřeby callbacků).
Takže pokud je potřeba, aby něco běželo souběžně, spustíte to jako
Kód: [Vybrat]
go func(...) {...} a kód píšete normálně synchronně. V hlavním threadu pak musíte zajistit synchronizaci výsledku.
