产生这个需求,通常有以下的原因:

  • 这个 goroutine 的运行超出了太多预计的时间,以致后续的计算不再有意义
  • 这个 goroutine 阻塞在某个 read/write channel 变得没有响应
  • 这个 goroutine 阻塞在某个系统调用,外部调用或业务逻辑的死循环

这种时候很自然地就会产生“主动外部 kill goroutine”的需求 (正如手动结束掉一个无响应的进程那样)。

然而 goroutine 被设计为不可以从外部无条件地结束掉,只能通过 channel 来与它通信。也就是说,每一个 goroutine 都需要承担自己退出的责任。(A goroutine cannot be programmatically killed. It can only commit a cooperative suicide.)

阅读原文 »

3 收藏


直接登录

推荐关注