在上一次分享中巢寡,咱們談到了阻塞與非阻塞,同步與異步的區(qū)別淹禾,http://www.reibang.com/p/e9c6690c0737
那么在這一次分享中柴墩,咱們主要是以講故事的方式講述一下NIO和IO的區(qū)別。那么在下一次分享中翩概,將進行Java NIO源碼的分析牲距。
故事的背景:
有一個動物園,動物園里面有獅子钥庇,老虎牍鞠,猴子等動物,他們每天定期來吃不同的水果评姨,而這些水果要由動物園管理員到貨場領取分配难述。
一、IO
我們知道,在使用IO的時候往往可以在服務器端使用多線程或者線程池來處理并發(fā)請求胁后,這也叫偽異步店读,那么故事開始了:
在貨場里有五個動物園管理員等待水果貨車的到來,他們一直在等待攀芯,如果貨車不來他們也要死等屯断,直到貨車的到來,這時候貨車來了敲才,每個管理員都領了一份水果去尋找動物裹纳,管理員A來到獅子旁邊择葡,給獅子一份蘋果紧武,獅子開始吃,中途吃累了敏储,休息了一會兒繼續(xù)吃阻星,這時候管理員A就一直等著獅子吃完,再回去拿水果去另一個動物那里已添。五個管理員都是這樣做的妥箕。
二、NIO
Java NIO是在jdk1.4開始使用的更舞,它既可以說成“新IO”畦幢,也可以說成非阻塞式I/O。下面是java NIO的工作原理:
由一個專門的線程來處理所有的IO事件缆蝉,并負責分發(fā)宇葱。
事件驅(qū)動機制:事件到的時候觸發(fā),而不是同步的去監(jiān)視事件刊头。
線程通訊:線程之間通過wait,notify等方式通訊黍瞧。保證每次上下文切換都是有意義的。減少無謂的線程切換原杂。
那么故事開始了:動物園里印颤,有一個管理員他先去了解動物們都喜歡吃什么樣的水果并做了一個登記,然后去貨場看一看貨車有沒有到來穿肄,如果沒有來他就回去繼續(xù)干別的事年局,就這樣每隔一段時間就去貨場看一下。這時候貨車來了咸产,他叫來另外五個管理員并告訴管理員哪些動物喜歡吃哪些水果某宪,管理員們分類取不同的水果,然后各自去找動物們分發(fā)水果锐朴,還是管理員A兴喂,來到獅子旁邊把它喜歡吃的蘋果給它吃,獅子吃的比較慢,這時候管理員A說衣迷,你先吃著畏鼓,我給其他動物送水果,我一會兒再來取水果盤子壶谒,這時候管理員A回去取來香蕉繼續(xù)猴子送去云矫,在猴子吃香蕉累了休息的時候,管理員A來找獅子拿回水果盤子汗菜,再去找猴子拿回水果盤子让禀。
不知道大家在看完這二個小故事之后有沒有理解NIO和IO,那么在下次分享的時候陨界,咱們將正式進入NIO原理及源碼的分享巡揍,謝謝大家。