问题标签 [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.
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
go - 使用 golang 通道的结果不一致
我用 Go 编写了一个任务,从一堆文本文件中获取一个唯一的列表。我使用通道进行了一些并行化,现在结果不一致 - 每次使用相同的输入文件输出/不输出 5 条记录的差异。
go run process.go | wc -l
我在 Fedora x86_64、go1.1.2、8 核 amd 上测试它。
代码是:
似乎它在通道清空之前关闭了通道。如果没有关闭机制,我就会陷入僵局 - 我没有想法。
concurrency - 匿名结构和空结构
http://play.golang.org/p/vhaKi5uVmm
[第一个问题]
我们如何以及为什么需要这个看起来很奇怪的结构?它是空结构还是匿名结构?我用谷歌搜索了它,但找不到正确的答案或文档来解释这一点。
原文来自 Andrew Gerrand 的演讲 http://nf.wh3rd.net/10things/#10
这里
done 是 struct{} 类型的通道
所以我尝试了
但它不起作用。为什么这条线需要一个额外的括号?
[第二个问题]
为什么我需要这条线?我知道这条线是必要的,因为没有这条线,就没有输出。但是这条线为什么和做什么?是什么使它在这段代码中变得必要?我知道这<-done
是从完成的通道接收值并丢弃接收到的值。但为什么我需要这样做?
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 块内部,它给您一种错觉,即您可以以同步的方式执行这些操作,因此您不必手动以连续传递样式编写代码。
go - 从 goroutine 中捕获返回值
下面的代码给出了编译错误,说'unexpected go':
我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获取返回值。
我的问题是为什么不能从 goroutine 中获取这样的返回值。
concurrency - Golang:生产者/消费者并发模型,但具有序列化结果
在上面的示例中,作业被推送到 jobChan 中,goroutines 会将其从 jobChan 中拉出并同时执行作业并将结果推送到 resultsChan 中。然后我们将从 resultsChan 中提取结果。
问题一:
在我的代码中,没有序列化/线性化的结果。尽管作业按作业 1、作业 2、作业 3 的顺序排列。结果可能会显示为 job3、job1、job2,具体取决于哪一个耗时最长。
我仍然想同时执行这些作业,但是,我需要确保结果从 resultsChan 中出来的顺序与它作为作业进入的顺序相同。
问题2:
我有大约 30 万个工作,这意味着代码将生成多达 30 万个 goroutine。拥有这么多 goroutine 是否有效,或者我最好将这些工作组合成 100 个左右的切片,让每个 goroutine 经历 100 个而不是 1 个。
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:
parallel-processing - goroutines 在多核处理器上的表现如何
我是Go语言的新手,所以如果我的问题非常基本,请原谅。我写了一个非常简单的代码:
count 的值应该随着循环运行的次数加一。考虑以下情况:
循环运行 100 次--> 计数值为 100(这是正确的,因为循环运行 100 次)。
循环运行 >510 次 --> 计数值是 508 或 510。即使它是 100000,也会发生这种情况。
我在 8 核处理器机器上运行它。
concurrency - 未通过通道发送数据
我这里有这段代码
https://gist.github.com/ChasingLogic/8324442
我正在尝试使用 Golang 学习网络编程,这是我第一次尝试并发,目标相当于一个精简的 irc 服务器,在该服务器上发送消息并回显给所有连接的客户端。
出于某种原因,我的代码永远无法将数据发送到通道中。如果我在其中进行错误检查,它将无限吐出 EOF。
concurrency - 测试 go 通道吞吐量 - 所有 goroutines 死锁
我做了一个小程序来测试 go 通道的吞吐量,但是它总是死锁,我很努力但不明白为什么: