本篇文章給大家分享的是有關(guān)Proactor和Reactor的區(qū)別是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的新洲網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Proactor:
事件句柄初始化一個(gè)異步讀操作,此時(shí)該句柄并不在意異步操作結(jié)果,而是要獲得完成事件而注冊(cè)
事件多路器等待直到io事件完成
當(dāng)事件多路器等待io事件時(shí),操作系統(tǒng)在一個(gè)并行的內(nèi)核線程上處理讀操作,并將數(shù)據(jù)放到一個(gè)用戶定義的緩沖中,并通知事件多路器操作完成。
事件多路器調(diào)用事件句柄
事件句柄從用戶定義緩沖中獲得用戶數(shù)據(jù)并操作,然后開(kāi)始新的異步操作并將控釋返回事件多路器
在Java 7 時(shí)添加了Java AIO,
Java AIO基于epoll模式來(lái)模擬實(shí)現(xiàn)(Linux 2.6)
https://www.jianshu.com/p/8dbb0686fb8b
所以對(duì)于那些讀寫過(guò)程時(shí)間長(zhǎng)的,NIO就不太適合。
而AIO的讀寫過(guò)程完成后才被通知,
所以AIO能夠勝任那些重量級(jí),讀寫過(guò)程長(zhǎng)的任務(wù)。
只是關(guān)注事件的階段不一樣,系統(tǒng)通知線程的方式不一樣,
但是AIO比NIO簡(jiǎn)化了代碼編寫的復(fù)雜度,
并且效率更高、更高伸縮性。
然后執(zhí)行對(duì)應(yīng)的處理函數(shù)(系統(tǒng)來(lái)開(kāi)辟一個(gè)線程來(lái)完成),
執(zhí)行完成會(huì)通知關(guān)心這個(gè)事件完成的線程,
在沒(méi)有通知時(shí)當(dāng)前線程可以先做自己的事情,
在獲取通知結(jié)果時(shí)會(huì)阻塞,
當(dāng)空閑下來(lái)的時(shí)候檢查一下通知回來(lái)的信息,
但是可以設(shè)置超時(shí)時(shí)間,
當(dāng)一段時(shí)間沒(méi)有還沒(méi)有結(jié)果,則繼續(xù)干別的事情。
然后通知當(dāng)前線程去處理,
在通知返回之前需要等待,
并且需要Selector配合通知線程;
NIO監(jiān)聽(tīng)的是什么事件準(zhǔn)備好了,
AIO監(jiān)聽(tīng)的什么事件已經(jīng)完成了,
AIO并不比NIO的IO讀寫更快,
由于NIO的讀寫過(guò)程依然在應(yīng)用線程里完成,
以上就是Proactor和Reactor的區(qū)別是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。