1
SErHo 2014-04-20 09:54:44 +08:00 via Android
你的自旋是怎么实现的,是不是将 buffer 当成循环数组,然后用类似无锁队列的模式来做的。
|
3
heimutuzhu 2014-04-20 22:33:58 +08:00
pthread_cond_wait, pthread_cond_signal 做线程同步就可以搞定了。 好好看下这两api。 futex貌似更底层一点吧
|
4
heiher OP @heimutuzhu 太慢了
|
5
killgxlin 2014-04-28 01:36:25 +08:00
会不会是读写buffer的时间太长了,所有数据是直接写到buffer里还是把存数据的内存的指针写到buffer里啊
|
6
heiher OP 这个问题解决了,不再使用一个专用的接收线程了(即生产者)。现在使用 Socket 的 fanout 模式,内核会自动把数据包调度到不同的线程上处理了。还使用了 zero-copy。
|
7
heimutuzhu 2014-05-09 18:39:32 +08:00
@heiher 你的问题修改了啊,不过从你的应用场景来看你这个实现思路有问题,消费者应该竞争所有的buffer,然后利用条件变量和锁来对消费者做线程同部。
|
8
heiher OP @heimutuzhu 就在避免竞争。z z
|
9
heimutuzhu 2014-05-13 12:50:17 +08:00
@heiher 不竞争整体效率就不能达到最高, 因为不可避免地有些消费得快,有些慢。
|