-
- 同步
- 異步
- 阻塞
- 非阻塞
- 結論
- 四種方式組合及性能分析
同步
發出一個調用時,在沒有得到結果之前,該調用就不傳回。但是一旦調用傳回,就得到傳回值.
異步
調用在發出之後,這個調用就直接傳回了,是以沒有傳回結果。換句話說,當一個異步過程調用發出後,調用者不會立刻得到結果。而是在調用發出後,被調用者通過狀态、通知來通知調用者,或通過回調函數處理這個調用
阻塞
阻塞調用是指調用結果傳回之前,目前線程會被挂起。調用線程隻有在得到結果之後才會傳回。
非阻塞
非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞目前線程
結論
我認為大概是這樣的:
異步/同步是發生在多線程中的.(單線程中的Timer内部實作也是多線程)
阻塞/非阻塞是發生在單線程中的.
同步和阻塞的最大差別就是線程會不會挂起
四種方式組合及性能分析
組合方式 | 性能分析 |
---|---|
同步阻塞 | 最常用的一種用法,使用也是最簡單的,但是I/O性能一般很差,CPU大部分處于控線狀态 |
同步非阻塞 | 提升I/O性能常用的手段,就是将I/O的阻塞改成非阻塞方式,尤其在網絡I/O是長連接配接同時傳輸資料也不是很多的情況下,提升性能非常有效. 這種方式通常能提升I/O性能,但是會增加CPU消耗,要考慮增加的I/O性能能不能補償CPU的消耗,也就是系統的瓶頸是I/O上還是CPU上. |
異步阻塞 | 這種方式在分布式資料庫中經常用到,例如,在一個分布式資料庫中記錄一條記錄,通常會有一份是同步阻塞的記錄,還有2~3份備份記錄會寫到其他機器上,這些備份記錄通常都是采用異步阻塞的方式寫I/O. 異步阻塞對網絡I/O能夠提升效率,尤其像上面這種同時寫多分相同資料的情況 |
異步非阻塞 | 這種組合方式用起來比較複雜,隻有在一些非常複雜的分布式情況下使用,叢集之間的消息同步機制一半用這種I/O組合方式,如Cassandra的Gossip通信機制就是采用異步非阻塞的方式. 它适合同時要傳多分相同的資料到叢集中不同的機器,同時資料的傳輸量雖然不大卻非常頻繁的情況.這種網絡I/O用這種方式性能能達到最高 |
1.引用自<深入分析java web技術内幕>
2.https://www.zhihu.com/question/19732473
此為讀書筆記,還望各位多多指導