Re:Evio – Fast event-loop networking for Go
by giovannibajo1 on Saturday November 04, 2017 @06:17PM
(#15627171)
It depends if you're describing a semantic model or you're concerned about implementation details.
Semantically, a goroutine is a thread, within a shared memory model. But what makes Go unique (or let's say more unique) is that it offers programmers a thread-like programming approach (linear, blocking code) but internally turns it into an event-driven approach (epoll/kqueue) for networking.
Moreover, the fact that goroutines are much cheaper than OS-level threads enable a more pervasive approach to concurrency.
Re:Evio – Fast event-loop networking for Go
by cdoxsey on Saturday November 04, 2017 @04:22PM
(#15626724)
Go uses an m:n thread model. Goroutines are multiplexed onto a smaller number of os-level threads. They're sort of like threads, but they have a simplified programming model (There is no thread-level storage for example).
Re:Evio – Fast event-loop networking for Go
by pcwalton on Saturday November 04, 2017 @04:23PM
(#15626729)
Goroutines are threads. They're just not kernel-level threads.
There have been implementations of pthreads that used an M:N model, for instance.
Re:Evio – Fast event-loop networking for Go
by weberc2 on Saturday November 04, 2017 @09:00PM
(#15627643)
For my information, why is M:N so successful for Go and not for pthreads? Is M:N more practical for systems with a particular kind of garbage collector?
Re:Evio – Fast event-loop networking for Go
by pcwalton on Sunday November 05, 2017 @12:06PM
(#15630292)
In my opinion, it's because the Go team put a ton of effort into getting M:N working and didn't rigorously evaluate any other alternatives in Go, once moving GC was implemented.
I'm not convinced that 1:1 wouldn't have been a perfectly reasonable implementation strategy for Go.
Re:Evio – Fast event-loop networking for Go
by weberc2 on Sunday November 05, 2017 @02:33PM
(#15631117)
This is surprising. It seems like Go gets pretty high praise from all over for its threading model, and it seems like there are relatively few high-performance servers that are built with 1:1. Am I wrong about that? If not, what explains this?
There's nothing semantically unique to Go about this model.