Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency Go通道中发送方的排序_Concurrency_Go_Channels - Fatal编程技术网

Concurrency Go通道中发送方的排序

Concurrency Go通道中发送方的排序,concurrency,go,channels,Concurrency,Go,Channels,以中国的乒乓球为例 主程序包 进口( “fmt” “时间” ) func pinger(c chan字符串){ 对于i:=0;;i++{ cping和ponggoroutines之间没有同步,因此不能保证响应将按顺序打印 如果强制goroutines与GOMAXPROCS>1竞争,则会得到随机输出: pong ping ping pong ping pong ping pong pong 这甚至不是一个“乒乓”的例子,因为没有呼叫和响应。最近有一个关于进入频道的消息选择顺序的问题 答案是,顺序

以中国的乒乓球为例

主程序包
进口(
“fmt”
“时间”
)
func pinger(c chan字符串){
对于i:=0;;i++{

cping
和ponggoroutines之间没有同步,因此不能保证响应将按顺序打印

如果强制goroutines与GOMAXPROCS>1竞争,则会得到随机输出:

pong
ping
ping
pong
ping
pong
ping
pong
pong
这甚至不是一个“乒乓”的例子,因为没有呼叫和响应。

最近有一个关于进入频道的消息选择顺序的问题


答案是,顺序通常是不确定的。这是故意的。

我的直觉是,顺序只是巧合。但我猜彼得索会证明我错了。正确。这是一个使用频道的糟糕例子,甚至不打乒乓球(通常指呼叫+应答)无论如何。这不是巧合,这是一个副作用,事实上除了发送之外几乎没有发生什么,而且打印比发送需要更长的时间。当一个发送者发送并且通道清除时,另一个已经准备好自己的发送,等等。这是一个非常糟糕的通道作为同步机制的例子,如果其中任何一个正在这样做的话真正的工作不是那样的。
pong
ping
ping
pong
ping
pong
ping
pong
pong