问题标签 [goroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
388 浏览

go - 有时间的例行公事

此代码的目的是使用 goroutine 计算我的计算机和 google.com 之间的每次连接时间。但结果似乎错误。为什么时间不断增加。这是怎么回事?

2013/12/04 16:10:41 www.google.com 597.175072ms

2013/12/04 16:10:41 www.google.com 608.161898ms

2013/12/04 16:10:41 www.google.com 614.527441ms

2013/12/04 16:10:41 www.google.com 620.51907ms

2013/12/04 16:10:41 www.google.com 630.052257ms

2013/12/04 16:10:42 www.google.com 654.539717ms

2013/12/04 16:10:42 www.google.com 659.144724ms

2013/12/04 16:10:42 www.google.com 1.282230659s

2013/12/04 16:10:42 www.google.com 1.353469764s

0 投票
1 回答
524 浏览

go - 使用 golang 通道的结果不一致

我用 Go 编写了一个任务,从一堆文本文件中获取一个唯一的列表。我使用通道进行了一些并行化,现在结果不一致 - 每次使用相同的输入文件输出/不输出 5 条记录的差异。

go run process.go | wc -l我在 Fedora x86_64、go1.1.2、8 核 amd 上测试它。

代码是:

似乎它在通道清空之前关闭了通道。如果没有关闭机制,我就会陷入僵局 - 我没有想法。

0 投票
5 回答
34507 浏览

concurrency - 匿名结构和空结构

http://play.golang.org/p/vhaKi5uVmm

[第一个问题]

我们如何以及为什么需要这个看起来很奇怪的结构?它是空结构还是匿名结构?我用谷歌搜索了它,但找不到正确的答案或文档来解释这一点。

原文来自 Andrew Gerrand 的演讲 http://nf.wh3rd.net/10things/#10

这里

done 是 struct{} 类型的通道

所以我尝试了

但它不起作用。为什么这条线需要一个额外的括号?


[第二个问题]

为什么我需要这条线?我知道这条线是必要的,因为没有这条线,就没有输出。但是这条线为什么和做什么?是什么使它在这段代码中变得必要?我知道这<-done是从完成的通道接收值并丢弃接收到的值。但为什么我需要这样做?

0 投票
2 回答
864 浏览

clojure - 我们可以将 Clojure 的 core.async 描述为“延续传递风格”吗?

在 Clojure 的core.async 库中,我们看到一个宏,它创建一个状态机,该状态机环绕go块以创建处理阻塞 IO 的通道。

这似乎是在C#Go-lang 的 goroutines上建模async

在 The Seasoned Schemer中,他们描述了传递延续的技术。(这似乎基于 call/cc)。我们还看到了来自David Nolen的关于Clojure中分隔延续的库。

在这里,他们将 C# 描述async为 ' call with current continuation '。

我的问题是我们可以将 Clojure 的 core.async 描述为“延续传递风格”吗?

还是“延续”(定界和未定界)是一个超载的术语?


编辑:另外说明 - David Nolen对 core.async 说过:

在 go 块内部,它给您一种错觉,即您可以以同步的方式执行这些操作,因此您不必手动以连续传递样式编写代码。

0 投票
4 回答
94032 浏览

go - 从 goroutine 中捕获返回值

下面的代码给出了编译错误,说'unexpected go':

我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获取返回值。

我的问题是为什么不能从 goroutine 中获取这样的返回值。

0 投票
1 回答
1137 浏览

concurrency - Golang:生产者/消费者并发模型,但具有序列化结果

在上面的示例中,作业被推送到 jobChan 中,goroutines 会将其从 jobChan 中拉出并同时执行作业并将结果推送到 resultsChan 中。然后我们将从 resultsChan 中提取结果。

问题一:

在我的代码中,没有序列化/线性化的结果。尽管作业按作业 1、作业 2、作业 3 的顺序排列。结果可能会显示为 job3、job1、job2,具体取决于哪一个耗时最长。

我仍然想同时执行这些作业,但是,我需要确保结果从 resultsChan 中出来的顺序与它作为作业进入的顺序相同。

问题2:

我有大约 30 万个工作,这意味着代码将生成多达 30 万个 goroutine。拥有这么多 goroutine 是否有效,或者我最好将这些工作组合成 100 个左右的切片,让每个 goroutine 经历 100 个而不是 1 个。

0 投票
1 回答
3312 浏览

http - golang http timeout and goroutines accumulation

I use goroutines achieve http.Get timeout, and then I found that the number has been rising steadily goroutines, and when it reaches 1000 or so, the program will exit

Code:

http://play.golang.org/p/SzGTMMmZkI

0 投票
5 回答
13822 浏览

parallel-processing - goroutines 在多核处理器上的表现如何

我是Go语言的新手,所以如果我的问题非常基本,请原谅。我写了一个非常简单的代码:

count 的值应该随着循环运行的次数加一。考虑以下情况:

循环运行 100 次--> 计数值为 100(这是正确的,因为循环运行 100 次)。

循环运行 >510 次 --> 计数值是 508 或 510。即使它是 100000,也会发生这种情况。

我在 8 核处理器机器上运行它。

0 投票
1 回答
63 浏览

concurrency - 未通过通道发送数据

我这里有这段代码

https://gist.github.com/ChasingLogic/8324442

我正在尝试使用 Golang 学习网络编程,这是我第一次尝试并发,目标相当于一个精简的 irc 服务器,在该服务器上发送消息并回显给所有连接的客户端。

出于某种原因,我的代码永远无法将数据发送到通道中。如果我在其中进行错误检查,它将无限吐出 EOF。

0 投票
2 回答
270 浏览

concurrency - 测试 go 通道吞吐量 - 所有 goroutines 死锁

我做了一个小程序来测试 go 通道的吞吐量,但是它总是死锁,我很努力但不明白为什么: