2017-02-05 53 views
-1

由于一般的内存需求和安装方面的开销非常小/推倒围棋程序的成本。即使实现一个线程(去例行程序)工作池也是相关的吗?什么时候你会考虑使用线程池而不是每个请求产生一个去程序?“线程池”与Go相关吗?

+0

如果您使用的是阻塞IO,你应该考虑使用线程池,而不是够程的。 – ymonad

+0

@ymonad,你是什么意思通过阻止IO?在Go中,所有IO都是阻塞的,这就是它的并发模型的全部。如果你的意思是文件IO,它在内部与网络IO有很大不同,那么问题根本不在于goroutines。这是关于等待系统调用返回的实际OS线程。 – creker

+0

@crecker我的意图是,就使用go的非阻塞网络库而言,您将得到goroutine的M:N线程模型的好处,但是,当您使用阻止IO的系统调用时,go scheduler每个goroutine创建一个线程,所以使用线程池可能是一个选项。 https://groups.google.com/forum/#!topic/golang-nuts/Luje-okL4jI – ymonad

回答

2

产卵并保持大量的够程在golang是便宜,但它不是免费的。

你应该还记得够程本身可能很便宜,但在同一时间大量的内存可以的够程代码中进行分配。所以你可能想限制同时运行的goroutines的数量。

您可以使用旗语来限制资源。 另一种方法(比较习惯)是使用具有工作池的执行流水线。这种模式在golang blog中有很好的描述。

1

是的,这是相关的。 db/sql由于建立新的连接需要时间而使用到数据库的连接池。

+1

这与主题略有不同 - 池化数据库连接与线程池并不完全相同。 –