相关疑难解决方法(0)

你如何定义一个在Golang中一次执行的goroutine池?

TL; TR:请转到最后一部分告诉我你将如何解决这个问题.

我今天早上开始使用Golang来自Python.我想从Go调用一个闭源可执行文件几次,带有一点并发性,使用不同的命令行参数.我生成的代码工作正常,但我想得到你的输入以改进它.由于我处于早期学习阶段,我还将解释我的工作流程.

为简单起见,这里假设这个"外部闭源程序"是zenity一个Linux命令行工具,可以从命令行显示图形消息框.

从Go调用可执行文件

所以,在Go中,我会这样:

package main
import "os/exec"
func main() {
    cmd := exec.Command("zenity", "--info", "--text='Hello World'")
    cmd.Run()
}
Run Code Online (Sandbox Code Playgroud)

这应该是正常的.注意,这.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++ {
        cmd := exec.Command("zenity", "--info", "--text='Hello from iteration n." + strconv.Itoa(i) + "'")
        cmd.Run()
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,我们做到了!但我仍然看不到Go over …

multithreading go goroutine

66
推荐指数
2
解决办法
3万
查看次数

最大数量的goroutines

我可以使用多少goroutines无痛?例如维基百科说,在Erlang中,可以创建2000万个进程,而不会降低性能.

更新:我刚刚调查了goroutines性能并得到了这样的结果:

  • 看起来goroutine的生命周期比计算sqrt()1000倍(对我来说~45μs)更多,唯一的限制是内存
  • Goroutine的成本为4 - 4.5 KB

go multitasking goroutine

62
推荐指数
4
解决办法
5万
查看次数

标签 统计

go ×2

goroutine ×2

multitasking ×1

multithreading ×1