【发布时间】:2016-04-09 13:01:10
【问题描述】:
我正在创建一个旨在长期运行并监听工作的围棋程序。当它收到请求时,它会在进程队列上运行工作。
我是 golang 和系统编程的新手,所以我的问题是:我应该在程序启动时启动进程队列(带有多个空闲的工作线程)(它们只会坐在那里直到工作开始)还是应该我在工作到达时启动它们并在完成时将它们关闭?
我不清楚多个空闲线程会产生的整体系统影响,但我假设由于它们处于空闲状态,因此在工作到达之前不会产生任何影响。话虽如此,我想确保我的程序是“好邻居”并且尽可能高效。
--编辑--
为了澄清,“进程池”是一组等待通道上工作的工作程序。它们应该在工作到达时启动/停止,还是在程序启动时启动并等待工作进入?
【问题讨论】:
-
golang中没有“创建线程”的概念。如果你在谈论 goroutines;它们非常便宜。根据需要启动它们。
-
goroutines 在其函数返回时结束。你通常不会有“空闲”的 goroutine,它们要么正在做某事,要么已经返回。
-
是的,我为不正确的命名道歉,goroutine 就是我所说的。那么,在通道上等待消息的长时间运行的“空闲” gorutine 池没有问题吗?
-
@SjB 你如何获得一个空闲的 goroutine 池。这听起来不对。
-
Goroutines 不需要操作系统线程,并且堆栈非常小。有一个池等待消息没有问题,但是因为它们生成起来非常便宜,所以“工作池”通常不是构建程序的正确方法。
标签: multithreading go daemon