Multithreading /p>

Multithreading /p>,multithreading,event-handling,producer-consumer,Multithreading,Event Handling,Producer Consumer,消息回收可能通过跟踪每个线程的当前消息编号来完成,而不是通过使用消息特定计数器来完成,因为消息特定计数器会造成并发瓶颈 我认为你不需要正式的排队机制。“producer”线程可以简单地更新一个volatile变量,该变量包含已刷新到主存的最新消息的数量,客户端线程可以在空闲时检查该变量,如果没有可用的工作则休眠。您可以在线程管理方面变得更加复杂,但额外的效率改进可能很小 我认为您不需要复杂的数据结构来实现这一点。对于可供处理的最新消息的数量以及每个客户机线程已处理的最新消息的数量,您需要可变变量

消息回收可能通过跟踪每个线程的当前消息编号来完成,而不是通过使用消息特定计数器来完成,因为消息特定计数器会造成并发瓶颈

我认为你不需要正式的排队机制。“producer”线程可以简单地更新一个volatile变量,该变量包含已刷新到主存的最新消息的数量,客户端线程可以在空闲时检查该变量,如果没有可用的工作则休眠。您可以在线程管理方面变得更加复杂,但额外的效率改进可能很小


我认为您不需要复杂的数据结构来实现这一点。对于可供处理的最新消息的数量以及每个客户机线程已处理的最新消息的数量,您需要可变变量。您需要将消息本身刷新到主内存中。您需要某种方法从消息编号中查找主内存中的消息,可能使用指针的循环缓冲区,或者如果消息长度相同,则使用消息的循环缓冲区。在线程之间通信的数据方面,您实际上不需要太多其他信息。

目前限制吞吐量的是什么?例如,如果它受到网络带宽的限制,那么使用多个线程是没有帮助的。如果受处理限制,那么当前软件的计算密集型部分是什么?@WarrenDew它的CPU绑定在单个内核上(例如,顶部显示一个内核上的100%CPU)。单线程代理可以根据流量的具体情况在600Mb/s到1Gb/s之间(在10Gb/s NIC和网络上)推出。我不能100%确定哪一块消耗了最多的CPU。最密集的部分应该是将流量发送给客户机。现在,我只是想得到一些简单的并行性,这样我就可以利用更多的机器,它有8个内核。如果我能得到2-4倍的加速,那现在就太好了。谢谢你的反馈!当你说我需要“将消息…刷新到主内存”时,你能更具体地解释一下你的意思吗?我使用的是高级接口(例如,-pthreads),不喜欢使用任何类型的汇编代码或类似的东西。我相信pthreads将其称为“相对于其他线程同步内存”。以下是pthreads内存同步的讨论,其中列出了可以使用的函数: