multithreading - 使用 goroutine 运行同一程序的另一个实例?

标签 multithreading go goroutine

使用 goroutines 运行同一个 go 程序的多个实例是否是一种可接受的做法,例如运行 go main()?

如果是这样,是否可以修改发送到 goroutine(或 os.Args[])的参数,以便 main() 函数不会创建无限数量的 goroutine? 然后 goroutines 应该能够通过 channel 相互通信。我知道 goroutines 共享相同的内存空间但有单独的堆栈,因此这可能会导致一些竞争条件问题。

或者,也许,这是对 Goroutines 的不当使用,我应该坚持使用 exec.Command() 来执行可执行文件的另一个实例,并让这些实例通过 JSON-RPC 进行通信。

感谢您的协助。

最佳答案

我不确定您是否理解 goroutine 在这里是如何工作的。把它想象成一个虚拟线程,因为在实践中它几乎是 Go 的线程替代品。当您调用 go foo() 时,您将在可执行文件中生成一个 goroutine(或虚拟线程),就像在其他语言中生成一个线程一样,而不是像 exec 或 syscall.ForkExec() 这样的单独进程.

Go 中的正确做法是坚持使用单个进程并使用 goroutines 来处理并发任务。例如,如果您正在编写自己的端口监听器并希望多次迭代以每次监听不同的端口,您的大纲可能是:

func APIHandler(port int) {
    // do stuff
}

func main() {
    go APIHandler(80)
    go APIHandler(81)
    go APIHandler(82)

    // sync.WaitGroup, or maybe wait on an error chan
}

关于multithreading - 使用 goroutine 运行同一程序的另一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174349/

相关文章:

java - 从其他线程访问 while 循环 bool 是线程安全的吗?

google-app-engine - 继续 Google App Engine 频繁关闭

go - 所有goroutine都处于 sleep 状态-死锁(无限循环+选择)

go - Goroutine 中的变量没有按预期更改

java - 使用线程和/或任务更新 JavaFx Gui

java - 超过 2 个线程的工作速度比 1 或 2 个线程慢,除非将 Thread.sleep(1) 放入线程的 run() 方法中

go - 将结构 slice 附加到另一个

go - 普通go func和go func中for循环的区别

java - 是否有 .Net 等同于 java.util.concurrent.Executor?

google-app-engine - 我的数据存储在 appspot 上没有索引条目?