io與nio理解

1,io是阻塞的,而且線程會被socket連接一直佔據。也就是說一個socket就會佔用一個線程數組

2,當socket連接中沒有數據傳輸時,線程會阻塞在read或者write方法,等待數據,線程任然被佔用緩存

3,nio是非阻塞的,nio之因此能實現非阻塞,核心是nio有buffer與selector。buffer(緩衝區),經過流傳遞的數據不是直接傳到read方法,而是寫入到相似數組的一個緩存區。這樣就能夠不用read方法一直等待數據而形成的阻塞。那那什麼時候調用read方法呢?selector,會獨立佔據一個線程,循環檢測buffer的狀態,當有數據可被讀取時調用read方法。如此,在沒有數據傳輸時,線程可被處理其餘事情,好比另外一條socket。socket

相關文章
相關標籤/搜索