使用無鎖結構會不會比有鎖結構更加快?
具體情況具體分析吧!如果你的網卡是1000Mb ps,1000兆的網絡,1400的UDP包,每秒也就不到10萬個包,這個吞吐量下是不是無鎖?隊列根本沒什么區(qū)別,瓶頸不會在鎖上面。select可能是個問題,說實話,很多年沒有在Linux服務端用過select了,都是用epoll的,所以select這屬性如何我不知道,但是一定沒有epoll好。
值得注意一下,malloc free memcpy不能用太多了,流量密集型高并發(fā)應用忌諱過多操作內存,復制分配釋放都會成為瓶頸。比如ublock 的header 和data這倆內存,如果沒有內存池,那么malloc 就是至少每秒幾十萬次的,對應的memcpy也是每秒幾十萬次,這個比鎖?的開銷大多了啊。
關于更多的Lock Contention,可以參見glibc 中pthread_mutex_lock的源代碼實現(xiàn),在沒有contention的時候,就是一條CAS指令,內核都沒有陷入,在contention發(fā)生的時候,就選擇陷入內核然后睡大覺,嘿嘿,等著某個線程nulock 后被喚醒。(詳見Futex )
感謝,尚有不足,敬請斧正
下一篇css3有哪些特性