【问题标题】:Blocking behavior of channel receive operator in goroutine callgoroutine调用中通道接收操作符的阻塞行为
【发布时间】:2021-05-03 13:41:45
【问题描述】:
go DelegateWork(mr, <-mr.impl.readyWorkers, jobArgs)    

在上面的例子中,通道接收操作符会导致调用者或被调用的 goroutine 阻塞吗?

【问题讨论】:

  • 是的,当然。怎么可能挡不住?如果这在某种程度上是非阻塞的,语义会是什么?为什么不应该阻塞?
  • 嗯,你是在传递值,不是吗,所以显然你必须等到从通道中读取一个值,然后才能实际调用函数/启动新例程.

标签: go channel goroutine


【解决方案1】:

Spec: Go statements:

函数值和参数在调用 goroutine 中像往常一样进行评估,但与常规调用不同,程序执行不会等待调用的函数完成。相反,该函数开始在一个新的 goroutine 中独立执行。

所以如果 &lt;-mr.impl.readyWorkers 阻塞,它会在新的 goroutine 启动之前阻塞调用者 goroutine。

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 2016-07-16
    • 2021-11-28
    • 1970-01-01
    • 2022-01-02
    • 2020-06-20
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多