Goroutine Leak Profiles
29 points - last Wednesday at 1:30 PM
SourceComments
deathanatos today at 4:46 AM
I'm coming predominately from other languages, so it took me a hot minute to figure out what the various bug were.
β’ channels are by default "unbuffered", in that a send needs a waiting recv to actually do the send, and blocks until such. The addition of the buffer prevents the block & permits the goroutine to progress (and eventually exit, and thus, not leak) β¦ so long as the buffer is sufficiently large enough.
β’ channels do not, AFAICT, realize when the receiver is gone, and will block indefinitely even when there is no receiver. (It is the same "chan" object, I think, in both sender/receiver / there is no distinction. So, the single object is never GC'd.)
β’ goroutines are not GC'd. (& the code doesn't/can't hold like, a reference or a handle to a goroutine / there is no "join" primitive.)