Multithreading goroutine池和其他语言中的线程池一样有意义吗?
我为一个事件流构建了一个简单的Multithreading goroutine池和其他语言中的线程池一样有意义吗?,multithreading,go,goroutine,Multithreading,Go,Goroutine,我为一个事件流构建了一个简单的goroutine工作池,其中包含一些chan,效果非常好。由于goroutines的性质,我开始问自己,除了限制并发工作人员之外,我还能从中获得什么。gorutines本身没有任何状态,它们在每次执行时都会重用,因此保留它们是有价值的 所以问题是,启动并重用goroutine,或者总是创建一个新的goroutine,并限制在同一时间创建/运行的数量,这样做有意义吗?因为goroutine是一个执行函数,它可以被认为包含以下资源集: 它执行的代码 Go运行时调度器
goroutine
工作池,其中包含一些chan
,效果非常好。由于goroutines的性质,我开始问自己,除了限制并发工作人员之外,我还能从中获得什么。gorutines
本身没有任何状态,它们在每次执行时都会重用,因此保留它们是有价值的
所以问题是,启动并重用goroutine,或者总是创建一个新的goroutine,并限制在同一时间创建/运行的数量,这样做有意义吗?因为goroutine是一个执行函数,它可以被认为包含以下资源集:
- 它执行的代码李>
- Go运行时调度器为该goroutine维护的状态李>
- 属于戈罗廷的私人的州
重复使用-而不是goroutines本身。这太宽泛了,无法给你一个好的答案。一般来说,goroutine非常轻量级,因此重用它们没有什么优势。如果您想限制一次处理的事情数量,那么使用其他机制(普通计数器)比使用工作池更容易。不,不是这样。协同程序的整个想法是为了摆脱对池的需求。问题直截了当地说“gorutines本身没有任何状态,它们每次执行时都会重复使用”。@Adrian,有一件巧妙的事情我要直截了当地告诉你:StackOverflow不仅作为问答服务存在,而且作为一个平台,人们可以在其中搜索现有的答案。大多数人使用谷歌搜索,但无论他们如何搜索,搜索都使用关键词来查找相关资料。这就是为什么在我的书中,用一般的方式回答问题会有所帮助。总而言之,我的答案提供了足够的一般信息,可以完全解决范围更窄的原始答案。天哪,这太好了,你说得对!如果你想回答更多的问题,那太好了!只要说“看起来这可能不适用于你目前的情况,但是……”这样提问者就可以很容易地分辨出哪些部分在回答他们的问题,哪些部分正是你认为有一天有人会发现有用的东西。