使用无锁结构会不会比有锁结构更加快?
具体情况具体分析吧!如果你的网卡是1000Mb ps,1000兆的网络,1400的UDP包,每秒也就不到10万个包,这个吞吐量下是不是无锁??队列根本没什么区别,瓶颈不会在锁上面。select可能是个问题,说实话,很多年没有在Linux服务端用过select了,都是用epoll的,所以select这属性如何我不知道,但是一定没有epoll好。
值得注意一下,malloc free memcpy不能用太多了,流量密集型高并发应用忌讳过多操作内存,复制分配释放都会成为瓶颈。比如ublock 的header 和data这俩内存,如果没有内存池,那么malloc 就是至少每秒几十万次的,对应的memcpy也是每秒几十万次,这个比锁??的开销大多了啊。
关于更多的Lock Contention,可以参见glibc 中pthread_mutex_lock的源代码实现,在没有contention的时候,就是一条CAS指令,内核都没有陷入,在contention发生的时候,就选择陷入内核然后睡大觉,嘿嘿,等着某个线程nulock 后被唤醒。(详见Futex )
感谢,尚有不足,敬请斧正
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有