multithreading - 是否应该在长时间运行的进程中留下空闲线程?

标签 multithreading go daemon

我正在创建一个旨在长期运行并监听工作的 go 程序。当它收到请求时,它会在进程队列上运行工作。

我是 golang 和系统编程的新手,所以我的问题是:我应该在程序启动时启动进程队列(有多个空闲工作线程)(它们会一直坐在那里直到工作开始)还是应该我在工作到达时启动它们并在完成时关闭它们?

我不清楚多个空闲线程对整个系统的影响,但我假设因为它们是空闲的,所以在工作到达之前不会有任何影响。也就是说,我想确保我的程序是一个“好邻居”并且尽可能高效。

--编辑--

澄清一下,“进程池”是一组在 channel 上等待工作的 worker go routines。它们应该在工作到达时启动/停止,还是在程序启动时启动并等待工作到来?

最佳答案

首先,您不能使用标准 Go 库创建线程。在 Go 宇宙中,你应该使用所谓的 goroutines green threads .

通常你不应该产生“可重用”的协程。它们的创建成本很低,因此在工作任务到达时按需创建它们,并在工作完成后立即完成(从 goroutine 返回)。

也不要犹豫创建嵌套的 goroutines。一般来说,如果您觉得应该以并发方式做某事并且不要尝试重用它们,那么疯狂地产生它们,因为它没有意义。

关于multithreading - 是否应该在长时间运行的进程中留下空闲线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616169/

相关文章:

c++ - 我可以将 boost::threadpool 用作 'thread-safe queue' 吗?

c# - 更新MVVM主线程中的进度条

go - 你如何让 -tags netgo 成为 go 的默认值?

mongodb - 为集合中的过期数据设置 TTL

java - 在 Java 中从多个线程读取(而不是修改)非线程安全的对象(如链表)是否安全?

c - 互斥锁总是由线程持有吗?

go - 当多个结构体在 golang 中有几个共同的功能时,最佳实践是什么

linux - 从 osx 守护进程运行 selenium bash 脚本

c# - 在 .NET Core 2 linux 守护进程中优雅地关闭通用主机

java - 一个线程依赖于另一个线程