轉(zhuǎn)載自https://mp.weixin.qq.com/s/dLciyzVfJno1nYyugWoryw
同步而姐、異步、阻塞划咐、非阻塞都是和IO(輸入輸出)有關(guān)的概念拴念。最簡(jiǎn)單的文件讀取就是IO操作。而在文件讀取這件事兒上褐缠,可以有多種方式政鼠。
1.什么是同步和異步
說(shuō)到燒水,我們都是通過(guò)熱水壺來(lái)燒水的送丰。在很久之前缔俄,科技還沒(méi)有這么發(fā)達(dá)的時(shí)候弛秋,如果我們要燒水器躏,需要把水壺放到火爐上,我們通過(guò)觀察水壺內(nèi)的水的沸騰程度來(lái)判斷水有沒(méi)有燒開(kāi)蟹略。
隨著科技的發(fā)展登失,現(xiàn)在市面上的水壺都有了提醒功能,當(dāng)我們把水壺插電之后挖炬,水壺水燒開(kāi)之后會(huì)通過(guò)聲音提醒我們水開(kāi)了揽浙。
對(duì)于燒水這件事兒來(lái)說(shuō),傳統(tǒng)水壺的燒水就是同步的,高科技水壺的燒水就是異步的馅巷。
同步請(qǐng)求膛虫,A調(diào)用B,B的處理是同步的钓猬,在處理完之前他不會(huì)通知A稍刀,只有處理完之后才會(huì)明確的通知A。
異步請(qǐng)求敞曹,A調(diào)用B账月,B的處理是異步的,B在接到請(qǐng)求后先告訴A我已經(jīng)接到請(qǐng)求了澳迫,然后異步去處理局齿,處理完之后通過(guò)回調(diào)等方式再通知A。
所以說(shuō)橄登,同步和異步最大的區(qū)別就是被調(diào)用方的執(zhí)行方式和返回時(shí)機(jī)抓歼。同步指的是被調(diào)用方做完事情之后再返回,異步指的是被調(diào)用方先返回示绊,然后再做事情锭部,做完之后再想辦法通知調(diào)用方。
2.什么是阻塞和非阻塞
還是那個(gè)燒水的例子面褐,當(dāng)你把水放到水壺里面拌禾,按下開(kāi)關(guān)后,你可以坐在水壺前面展哭,別的事情什么都不做湃窍,一直等著水燒好。你還可以先去客廳看電視匪傍,等著水開(kāi)就好了您市。
對(duì)于你來(lái)說(shuō),坐在水壺前面等就是阻塞的役衡,去客廳看電視等著水開(kāi)就是非阻塞的茵休。
阻塞請(qǐng)求,A調(diào)用B手蝎,A一直等著B(niǎo)的返回榕莺,別的事情什么也不干。
非阻塞請(qǐng)求棵介,A調(diào)用B钉鸯,A不用一直等著B(niǎo)的返回,先去忙別的事情了邮辽。
所以說(shuō)唠雕,阻塞非阻塞最大的區(qū)別就是在被調(diào)用方返回結(jié)果之前的這段時(shí)間內(nèi)贸营,調(diào)用方是否一直等待。阻塞指的是調(diào)用方一直等待別的事情什么都不做岩睁。非阻塞指的是調(diào)用方先去忙別的事情钞脂。
Java中的三種IO模型
BIO (Blocking I/O):同步阻塞I/O模式,數(shù)據(jù)的讀取寫(xiě)入必須阻塞在一個(gè)線程內(nèi)等待其完成捕儒。
NIO (New I/O):同時(shí)支持阻塞與非阻塞模式芳肌,但主要是使用同步非阻塞IO。
AIO (Asynchronous I/O):異步非阻塞I/O模型肋层。