使用方法调用与渠道

我对Go的并发模式越来越熟悉,我想阐明最佳实践。

  1. 我了解我们希望使用渠道进行交流 在goroutine之间。话虽如此,但在某些情况下结构 方法调用有意义,或者在每个方法中都使用通道 情况
  2. 在传达已处理的消息/结构时 (不是传递/注册的模块等)最好传递 按值排列它们,这样我们就不必冒险修改两个goroutine 同时?
HUAZAI520520 回答:使用方法调用与渠道

您不能使用方法调用或函数调用与其他goroutine通信。从goroutine调用函数时,该函数将在调用它的goroutine中执行。您只能使用通道,共享内存以及使用同步包中的同步原语与其他goroutine通信,以防止出现竞争状况。

问题的第二部分取决于情况。

g1:
y:=<-ch

g2:
ch<-x

在上述情况下,g1和g2是独立的goroutine。假设g2将值(而非指针)x发送到g1。然后g1获得x的副本,并且两个goroutine都可以在其副本上工作。如果x是一个指针,则g1获取一个指向x的指针,然后g1和g2必须协调对该指针指向的值指针的访问。

因此,如果g2在将值x发送到g1后未读取或修改值x,则可以发送指针以避免复制。

本文链接:https://www.f2er.com/3105390.html

大家都在问