有个应用需要快速的处理网络上的数据包,对响应时间有着较高的要求。考虑到数据包处理上要花一些时间, 还是搞成了多线程方式,线程的模型是是 1 个生产者持有 1000 个buffer、10 个消费者(消费者之间是独立的无共享部分,每个消费者持有连续的 100 个buffer),要做的是当生产者向一个消费者所属的 buffer list 放入数据后,消费者线程要以最快的速度处理。实验中发现直接使用 futex 系统调用实现 wake 和 wait 也会存在生产了、消费太慢的情况。好像 pthread_cond_wait 就是使用 futex 实现的吧?
现在消费者不去 sleep,持续自旋查询 buffer 填充状态,其处理速度是可以接受的,但持续的 CPU 占用总觉得不合适?谁能给个解决方法呢?谢谢!
现在消费者不去 sleep,持续自旋查询 buffer 填充状态,其处理速度是可以接受的,但持续的 CPU 占用总觉得不合适?谁能给个解决方法呢?谢谢!