Questions tagged «goroutine»

12
如何在Java中异步调用方法
我最近一直在研究Go的goroutine,并且认为在Java中拥有类似的东西会很好。就我搜索的并行化方法调用的通用方法而言,它是执行以下操作: final String x = "somethingelse"; new Thread(new Runnable() { public void run() { x.matches("something"); } }).start(); 那不是很优雅。有更好的方法吗?我在项目中需要这样的解决方案,因此我决定围绕异步方法调用实现自己的包装器类。 我在J-Go中发布了包装器类。但是我不知道这是否是一个好的解决方案。用法很简单: SampleClass obj = ... FutureResult<Integer> res = ... Go go = new Go(obj); go.callLater(res, "intReturningMethod", 10); //10 is a Integer method parameter //... Do something else //... System.out.println("Result: "+res.get()); //Blocks until …

3
示例对sync.WaitGroup正确吗?
此示例用法sync.WaitGroup正确吗?它给出了预期的结果,但是我不确定wg.Add(4)的位置wg.Done()。一次添加四个goroutine是否有意义wg.Add()? http://play.golang.org/p/ecvYHiie0P package main import ( "fmt" "sync" "time" ) func dosomething(millisecs time.Duration, wg *sync.WaitGroup) { duration := millisecs * time.Millisecond time.Sleep(duration) fmt.Println("Function in background, duration:", duration) wg.Done() } func main() { var wg sync.WaitGroup wg.Add(4) go dosomething(200, &wg) go dosomething(400, &wg) go dosomething(150, &wg) go dosomething(600, &wg) wg.Wait() fmt.Println("Done") …
108 go  goroutine 

5
如何在不使用time.Sleep的情况下等待所有goroutine完成?
这段代码将选择同一文件夹中的所有xml文件,作为被调用的可执行文件,并以异步方式将处​​理应用于回调方法中的每个结果(在下面的示例中,仅打印出文件名)。 如何避免使用sleep方法阻止main方法退出?我在解决问题时遇到了麻烦(我想这就是同步结果所需要的),因此对您有所帮助! package main import ( "fmt" "io/ioutil" "path" "path/filepath" "os" "runtime" "time" ) func eachFile(extension string, callback func(file string)) { exeDir := filepath.Dir(os.Args[0]) files, _ := ioutil.ReadDir(exeDir) for _, f := range files { fileName := f.Name() if extension == path.Ext(fileName) { go callback(fileName) } } } func main() …

6
如何停止goroutine
我有一个goroutine,它调用一个方法,并在通道上传递返回的值: ch := make(chan int, 100) go func(){ for { ch <- do_stuff() } }() 如何停止这种goroutine?
102 go  goroutine  channels 

4
从goroutine捕获返回值
以下代码给出了编译错误,提示“意外运行”: x := go doSomething(arg) func doSomething(arg int) int{ ... return my_int_value } 我知道,如果正常调用函数就可以获取返回值,而无需使用goroutine。或者我可以使用频道等 我的问题是为什么不能从goroutine中获取像这样的返回值。

6
最大例行程序数
我可以无痛地使用多少个goroutine?例如,维基百科说,在Erlang中,可以创建2000万个进程,而不会降低性能。 更新:我刚刚对goroutines性能进行了一些调查,并得到了这样的结果: 看起来goroutine的生存期比计算sqrt()的次数要多1000倍(对我而言约为45µs),唯一的限制是内存 Goroutine的成本4 — 4.5 KB

3
您如何定义要立即执行的goroutine池?
TL; DR:请转到最后一部分,告诉我如何解决此问题。 我今天早上开始使用来自Python的Go语言。我想用不同的命令行参数多次调用Go的封闭源可执行文件,并发一点。我得到的代码工作得很好,但是我想得到您的意见,以便进行改进。由于我处于早期学习阶段,因此我还将解释我的工作流程。 为了简单起见,在此假定此“外部封闭源程序”是zenityLinux命令行工具,可以从命令行显示图形消息框。 从Go调用可执行文件 因此,在Go中,我会这样: package main import "os/exec" func main() { cmd := exec.Command("zenity", "--info", "--text='Hello World'") cmd.Run() } 这应该工作正确。请注意,.Run()是一个功能相当于.Start()其次.Wait()。很好,但是如果我只想执行一次该程序,那么整个编程工作将不值得。因此,让我们做多次。 多次调用可执行文件 现在,我已经开始工作了,我想使用自定义命令行参数多次调用程序(这里只是i为了简单起见)。 package main import ( "os/exec" "strconv" ) func main() { NumEl := 8 // Number of times the external program is called for i:=0; i<NumEl; i++ …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.