Hacker news

  • Top
  • New
  • Past
  • Ask
  • Show
  • Jobs

Goroutine Leak Profiles (https://go.dev)

58 points by torutofu 3 days ago | 6 comments | View on ycombinator

deathanatos about 15 hours ago |

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.)

sethammons about 9 hours ago |

General rule: never call a goroutine without understanding how it will close.