2017-02-05 52 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

這與主題略有不同 - 池化數據庫連接與線程池並不完全相同。 –