?????????????????NIO???????о??е???????????????????о??????????????????Java NIO????????????????????Щ????????????I/O???????汾????????????????? ????????????????????????????????????????????IO???????IO?????????????????IO????IO??????????????????5??IO?????????????????????IO??????????????Reactor??Proactor????
?????.?????????????????
?????????????????????????????????й???????????????к?????????????????
??????????????ж?????????????????????Щ?????????????????????У??????????????????л??????????????????????Щ?????а?????????У?
?????????????ж????????????????????Щ??????????????У??????????????????в??????????????????????
???????????????????????????????????????????????????????A??B????????????????A????е?????У?B??е???????A???????B??????У???????????A??B???????????У?B??????A?????????????У?????????????A????е????????????????????
???????????????????????????2?δ???
????void fun1() {
????}
????void fun2() {
????}
????void function(){
????fun1();
????fun2()
????.....
????.....
????}
??????δ???????????????????function?У?fun1????е?????л??o?????fun2?????У?fun2??????fun1????????????С?
???????????????δ???
void fun1() {
}
void fun2() {
}
void function(){
new Thread(){
public void run() {
fun1();
}
}.start();
new Thread(){
public void run() {
fun2();
}
}.start();
.....
.....
}
??????δ????????????????fun1????в??????fun2????У?????fun1??fun2????в??????????????й???????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Java?е?synchronized???????????????????????????????????????????????????????????????????????????????????Щ????????????????????????????????????????????У?????????????????????????????????????????????????????????????з????
??????????????????????????????????棬???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Σ????????????????????????????
??????.?????????????????????
????????????????????????????????????????????????????????
???????????????????????????????й????У????????????????????????????????????????????????????????????????????????????
?????????????????????????????????й????У????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????
?????????????????????е???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????Щ???????????????????????????????????????????????????????????????????????????????????????IO??????????????
?????????????????????????????й????У???????????????????????????????????
????????????????????????????????????????????????в???????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????
??????.????????IO???????????IO??
?????????????IO???????IO?????????????????IO????????????????е??
????????????IO?????????????????д????socket???д?????????д??
??????????????????IO??????????????????????????????????????????????????????????????IO????????????????????????????????????????????????????IO?????????????????????????????????????????????????????????????????????????????????????????????????????????????IO????????????????????????IO???????????????????Σ?
????1???????????????
????2?????????????????????????????????????
?????????????blocking IO???????????non-blocking IO??????????????????Σ????????????????????????????????????????????????????????????????
????Java?д????IO????????IO?????????socket?????????????read()????????????????????????????????????read??????????????????????????????????????IO??????????????????read()??????÷????????????????????????????????????????????????????
??????.???????IO????????IO??
????????????????????IO????IO????壬???Unix???????????ж????IO????IO??????????????
????A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.
????An asynchronous I/O operation does not cause the requesting process to be blocked.
??????????????????????????IO?? ????????????????IO????????IO???????????????????????
????????IO? ????????????????IO??????IO????????????????????????
?????????????IO????IO????????????????????????????
???????????IO???????????IO???????????????????????????????????????????????????????????????????????????????????????????????
????????IO?????IO???????????????????????????е??IO????????????ζ???????????????????????????????IO?????????ɡ?????????IO?У????????????????κ???????
???????????IO????IO???????????????IO????IO??????????????????????????????????????????ɡ????????IO??????в?????????????
??????????IO????IO??????IO???????IO????????????
????????IO???????IO??????????????IO????????????????????????????????????????????????????????????????????????????????IO???????IO??????IO????????????Σ??????????????????δ?????
??????.????IO???
???????Unix????????????????????IO??????????????IO????????IO????·????IO?????????IO?????IO??
?????????????????????5??IO?????????
????1.????IO???
????????????IO?????????д????????л???????????
???????????????IO?????????????????????????????????????????????????????????????????????????CPU???????????????????????????????????????????????????????????block????
?????????????IO???????????
????data = socket.read();
????????????????????????????read??????
????2.??????IO???
??????????????????read?????????????????????????????????????????????????error??????????????????????????????????η???read?????????????е????????????????????????????????????????????????????????????????????????
?????????????????????IO????У????????????????????????????????????????IO??????CPU???????????CPU??
??????????????IO?????????£?
????while(true){
????data = socket.read();
????if(data!= error){
????????????
????break;
????}
????}
????????????????IO???????????????????while???????????????????????????????????????CPU????????????????????o??????while???????????????????
????3.??·????IO???
??????·????IO???????????????????Java NIO????????·????IO??
???????·????IO????У?????????????????????socket????????е?socket?????ж?д????????????????????IO??д????????????·????IO????У??????????????????????socket??????????????μ?????????????????????Щ???????????????????????socket??д????????????????IO????????????????????????á?
??????Java NIO?У??????selector.select()??????????????е???????????????????????????????????????????????????????????
????????????????????????? ?????+ ????IO ???????Ч?????????????????? + ????IO ?У????socket????????????????????????????????????????????????????????????????????????????????к???????????????????????????
????????·????IO?????????????????????socket????е?socket?????ж?д???????????????????????????д????????????·????IO??????????????????????
?????????·????IO??α??????IO????Ч???????????????IO?У?????????socket????????????????е???????·????IO?У???????socket???????????е?????Ч????????????????
??????????????????·????IO???????????????????????????????????????????????????????????????·????IO???????????????????????????o???????????ò?????????????????μ?????????