线程池和作业队列体系结构
Thread Pool and Job Queue Architecture?
我有一个epoll来接收传入事件并将它们放入作业队列中。
当事件被放入作业队列时,pthread条件信号被发送以唤醒工作线程。
然而,我遇到了一个问题,所有的工作线程都很忙,Jobs总是堆积在队列中。这是一个严重的问题,因为如果作业被堆叠,并且新事件在一段时间内不会出现,队列中的作业将不会交给Worker Threads。
一旦线程可用,我希望他们可以自动从作业队列中获取作业(如果可能的话)。
有办法这样做吗?我所能想到的就是…添加一个队列观察器并每隔一段时间发送一个条件信号。
另外,我知道STL队列不是线程安全的。这是否意味着每次访问STL队列时都必须使用互斥锁?这难道不会减慢我的工作进度吗?
任何解决这个问题的建议都很好。
对生产者-消费者队列上的作业进行计数/发出信号的经典方法是使用信号量。生产者在推送一个作业后发出信号,消费者在弹出一个作业之前等待它。你也需要在推送/弹出周围有一个互斥锁来保护队列免受多次访问。
看看.NET中的工作窃取线程池。是的,你必须对全局队列进行互斥锁定,为此,我编写了一个双锁deque,这样前/后操作就可以并行完成。我也有一个无锁的deque,但客户端应用程序的开销太高了。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 为什么我的多线程作业队列崩溃
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 以编程方式在运行时检测 CPU 体系结构
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 线程池和作业队列体系结构
- 线程和消息队列体系结构.Java和C++的区别