linux epoll 線程池 多線程編程的時候,使用無鎖結(jié)構(gòu)會不會比有鎖結(jié)構(gòu)更加快?
多線程編程的時候,使用無鎖結(jié)構(gòu)會不會比有鎖結(jié)構(gòu)更加快?這是毫無疑問的,因為線程鎖定是資源密集型的!那么,如何避免鎖的性能下降呢?1、從業(yè)務(wù)上避免大量鎖結(jié)構(gòu)!2. 使用ThreadLocal,可以保證每
多線程編程的時候,使用無鎖結(jié)構(gòu)會不會比有鎖結(jié)構(gòu)更加快?
這是毫無疑問的,因為線程鎖定是資源密集型的
!那么,如何避免鎖的性能下降呢?
1、從業(yè)務(wù)上避免大量鎖結(jié)構(gòu)
!2. 使用ThreadLocal,可以保證每個線程中的數(shù)據(jù)不會互相污染
!3. 如果讀多寫少,請使用讀寫鎖
!4. 自旋鎖將挑戰(zhàn)CPU,盡管它是一個線程時間很少的鎖
!5. 鎖的粒度應(yīng)該盡可能?。喝绻i可以在方法中,就不應(yīng)該占用整個方法
epoll需要與多個線程一起工作才能獲得最佳性能。當(dāng)輪詢線程接收到IO時,它會立即將工作移交給預(yù)先分配的線程池,以完成讀寫工作,而不是阻塞輪詢線程。這樣,就不會有讀寫另一個信號的問題。