173得票13回答
如何在Java中异步调用方法

我最近一直在研究Go语言中的协程(goroutines),并且认为在Java中也拥有类似功能会很不错。根据我的搜索结果,常见的实现方法是通过以下方式进行方法调用并行化:final String x = "somethingelse"; new Thread(new Runnable() { ...

171得票5回答
如何等待所有Goroutine完成而不使用time.Sleep?

这段代码选择了与被调用可执行文件在同一文件夹中的所有XML文件,并异步地在回调方法中处理每个结果(在下面的示例中,仅打印文件名)。 我如何避免使用sleep方法来防止主方法退出? 我无法理解通道(我认为这就是同步结果所需的),因此需要任何帮助!package main import ( ...

157得票8回答
如何停止一个 goroutine

我有一个 goroutine 调用一个方法,并将返回值传递到一个通道:ch := make(chan int, 100) go func(){ for { ch <- do_stuff() } }() 我该如何停止这样一个 goroutine?

139得票5回答
从goroutine中获取返回值

下面的代码编译时会报错,显示“意外的 go”:x := go doSomething(arg) func doSomething(arg int) int{ ... return my_int_value } 我知道,如果我正常调用函数,即不使用goroutine或使用cha...

116得票7回答
一个通道上有多个 goroutine 监听

我有多个goroutine同时尝试在同一个通道上接收数据。似乎最后一个开始接收通道数据的goroutine会取得该值。这是否是语言规范中的某个地方,还是未定义的行为? c := make(chan string) for i := 0; i < 5; i++ { go func...

115得票3回答
关于sync.WaitGroup使用的示例是否正确?

这个sync.WaitGroup的使用示例是否正确?它能够得到期望的结果,但我不确定wg.Add(4)和wg.Done()的位置是否正确。使用wg.Add()一次性添加四个goroutine是否有意义? http://play.golang.org/p/ecvYHiie0Ppackage m...

103得票7回答
最大goroutine数量

我可以毫不费力地使用多少个goroutine呢? 例如,维基百科说,在Erlang中可以创建2000万个进程而不降低性能。 更新: 我刚刚研究了一下goroutine的性能,得出了以下结果: 似乎goroutine的生命周期长于计算sqrt() 1000次(对我来说大约是45µs),唯一...

84得票7回答
一个Go goroutine是否是一个协程?

在 Google I/O 2012 的演讲Go Concurrency Patterns中,Rob Pike提到多个goroutines可以存在于一个线程中。这是否意味着它们被实现为coroutines?如果不是,它们是如何实现的?欢迎提供源代码链接。

80得票7回答
Goroutines是如何工作的?(或:goroutines和操作系统线程的关系)

如何在调用系统调用时让其他goroutine继续执行?(当使用GOMAXPROCS = 1时)据我所知,调用系统调用时线程会放弃控制权,直到系统调用返回。如何在不为每个阻塞在系统调用上的goroutine创建系统线程的情况下实现Go并发? 来自文档: 引用: - Goroutines - ...

80得票8回答
始终保持 x 个 goroutine 在任何时候运行

我看到很多关于如何让Go等待x个goroutine完成的教程和示例,但我的目标是确保始终有x个goroutine在运行,因此一旦一个结束就立即启动一个新的goroutine。 具体而言,我有几十万个“要做的事情”,即处理从MySQL中出来的一些东西。它的工作原理如下:db, err := sq...