3 ms·
You might find that the blocking style of Go networking code is far less mind bending than using twisted.
by jesstaa 14y ago
You might find that the blocking style of Go networking code is far less mind bending than using twisted.
- james4k 14y agoYes, and the beautiful thing about it, is that the blocking calls you make are actually implemented as evented IO. This is great when you have a large number of goroutines; it keeps it very fast!
- jesstaa 14y agoAll I/O is evented I/O. It's just that with modern I/O requirements it's too expensive to use a whole thread to wait for the event.
- chc 14y agoWait, what? Do you have any references for that? My impression was that Go creates new threads for new Goroutines when the current ones are blocked. Is that not how it works?
- baruch 14y agoThe goroutine is a user-thread, Go can create as many threads as there are cores and schedules user-threads inside these threads without the programmer managing that, you just create goroutines. When a goroutine "blocks" it schedules out from the thread and another can replace it. http://golang.org/doc/effective_go.html#goroutines http://golang.org/doc/effective_go.html#goroutines
- jesstaa 14y agoThe Go runtime creates new threads to run goroutines when a thread is blocked making a syscall. The net package avoids having too many threads blocking on syscalls by using epoll/kqueue etc. for socket I/O.
- deleted 14y ago[deleted]