JAVA的網絡

關於JAVA的網絡,之前有個比喻形式的總結,分享給大家:
例子:有一個養雞的農場,裏面養着來自各個農戶(Thread)的雞(Socket),每家農戶都在農場中建立了自己的雞舍(SocketChannel)
1、BIO:Block IO,每個農戶盯着自己的雞舍,一旦有雞下蛋,就去做撿蛋處理;
2、NIO:No-Block IO-單Selector,農戶們花錢請了一個飼養員(Selector),並告訴飼養員(register)如果哪家的雞有任何情況(下蛋)均要向這家農戶報告(select keys);
3、NIO:No-Block IO-多Selector,當農場中的雞舍逐漸增多時,一個飼養員巡視(輪詢)一次所需時間就會不斷地加長,這樣農戶知道自己家的雞有下蛋的情況就會發生較大的延遲。怎麼解決呢?沒錯,多請幾個飼養員(多Selector),每個飼養員分配管理雞舍,這樣就可以減輕一個飼養員的工作量,同時農戶們可以更快的知曉自己家的雞是否下蛋了;
4、Epoll模式:如果採用Epoll方式,農場問題應該如何改進呢?其實就是飼養員不需要再巡視雞舍,而是聽到哪間雞舍的雞打鳴了(活躍連接),就知道哪家農戶的雞下蛋了;
5、AIO:Asynchronous I/O, 雞下蛋後,以前的NIO方式要求飼養員通知農戶去取蛋,AIO模式出現以後,事情變得更加簡單了,取蛋工作由飼養員自己負責,然後取完後,直接通知農戶來拿即可,而不需要農戶自己到雞舍去取蛋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章