久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Java的NIO以及線程并發(fā)

NIO出現(xiàn)后,好像讓java的程序員有了楊眉吐氣的機(jī)會(huì),怎么個(gè)吐氣法,當(dāng)時(shí)大家是個(gè)什么感受,俺是不知道,因?yàn)楫?dāng)時(shí)俺不搞java,對(duì)java的認(rèn)識(shí)有限。

AD:

    一、NIO的出現(xiàn)

    NIO是JDK1.4里面才出現(xiàn)的東東,他給大家?guī)?lái)的最大好處是異步socket。其它file,pipe暫時(shí)就不多談了。

    在JDK1.4出現(xiàn)之前,如果你需要編寫(xiě)一個(gè)Java服務(wù)器,為了實(shí)現(xiàn)異步操作,你必須為每個(gè)連接請(qǐng)求生成一個(gè)Java線程,當(dāng)連接請(qǐng)求很多時(shí),線程的調(diào)度,上下文切換,所付出的代價(jià)是非常昂貴,而且由于Java是跨平臺(tái)的,各個(gè)平臺(tái)對(duì)線程的支持并不相同,性能也不相同,因此傳統(tǒng)的Java服務(wù)器編程架構(gòu)是低效的且代價(jià)貴,dl大俠寫(xiě)了個(gè)util.concurrent包后,總算是減輕了線程調(diào)度給java程序員帶來(lái)的痛苦,但是相比之與C、C++寫(xiě)出來(lái)的服務(wù)器,java服務(wù)器在性能要求很高的情況下,基本上沒(méi)有什么競(jìng)爭(zhēng)力,甚至是入圍的權(quán)利的都沒(méi)有。

    二、異步socket的實(shí)現(xiàn)

    NIO出現(xiàn)后,好像讓java的程序員有了楊眉吐氣的機(jī)會(huì),怎么個(gè)吐氣法,當(dāng)時(shí)大家是個(gè)什么感受,俺是不知道,因?yàn)楫?dāng)時(shí)俺不搞java,對(duì)java的認(rèn)識(shí)有限。

    NIO是一個(gè)基于事件的IO架構(gòu),最基本的思想就是:有事件我通知你,你再去做你的事情,沒(méi)事件時(shí)你大可以節(jié)約大把時(shí)間去做其它任何事情。而且NIO的主線程only
    one,不像傳統(tǒng)的模型,需要N個(gè)線程去,也減輕了JVM的工作量,使得JVM處理任務(wù)時(shí)顯得更加高效。

    剛開(kāi)始接觸NIO時(shí),被N層的Channel架構(gòu)、網(wǎng)上鋪天蓋地的好評(píng)給鎮(zhèn)住了,想想也應(yīng)當(dāng)是個(gè)很成熟的產(chǎn)品了,網(wǎng)上資料這么多,抄一抄Jetty、Tomcat以及其它一些牛B的源代碼,基本上就能搞定了,此時(shí)沒(méi)有想到大家受同步的影響這么深,也沒(méi)有想到連最基本的異步概念都沒(méi)有搞清楚就去寫(xiě)代碼,搞出一堆的問(wèn)題來(lái)(這是后話,后面再說(shuō))。

    現(xiàn)在研究了NIO以后,發(fā)現(xiàn)NIO實(shí)際上在Java中做的工作是很簡(jiǎn)單,就是將事件進(jìn)行收集和分發(fā),我們結(jié)合一個(gè)經(jīng)典的調(diào)用例子來(lái)說(shuō)明這個(gè)問(wèn)題,我就不從NIO的基本使用說(shuō)起了,大家可以查其它的資料,網(wǎng)上一大把。
    當(dāng)Channel注冊(cè)至Selector以后,我們的最經(jīng)典的調(diào)用方法,是這樣子的。

                                                     
    1. while(somecondition)
    2. {
    3. int n = selector.select(TIMEOUT);
    4. if(n == 0) continue;
    5. for (Iterator iter = selector.selectedKeys().iterator(); iter.hasNext();)
    6. {
    7. if (key.isAcceptable())
    8. doAcceptable(key);
    9. if (key.isConnectable())
    10. doConnectable(key);
    11. if (key.isValid() && key.isReadable())
    12. doReadable(key);
    13. if (key.isValid() && key.isWritable())
    14. doWritable(key);
    15. iter.remove();
    16. }
    17. }
     

    這只是個(gè)小例子啊,什么異常我就懶得抓了。

    nio中取得事件通知,就是在selector的select事件中完成的,在selector事件時(shí)有一個(gè)線程,這個(gè)線程具體的處理簡(jiǎn)單點(diǎn)說(shuō)就是:向操作系統(tǒng)詢(xún)問(wèn),selector中注冊(cè)的Channel&&SelectionKey的偶對(duì)各種事件是否有發(fā)生,如果有則添加到selector的selectedKeys屬性Set中去,并返回本次有多少個(gè)感興趣的事情發(fā)生。程序員發(fā)現(xiàn)這個(gè)值>0,表示有事件發(fā)生,馬上迭代selectedKeys中的SelectionKey,根據(jù)Key中的表示的事件,來(lái)做相應(yīng)的處理。

    實(shí)際上,這段說(shuō)明表明了異步socket的核心,即異步socket不過(guò)是將多個(gè)socket的調(diào)度(或者還有他們的線程調(diào)度)全部交給操作系統(tǒng)自己去完成,異步的核心Selector,不過(guò)是將這些調(diào)度收集、分發(fā)而已。因?yàn)椴僮飨到y(tǒng)的socket、線程調(diào)度再咋D也比你JVM中要強(qiáng),效率也高。

    而且就算jvm做的和操作系統(tǒng)一樣好,性能一樣高(當(dāng)然這是不現(xiàn)實(shí)的),使用異步socket你至少也節(jié)約了一半的系統(tǒng)消耗,想想假定操作系統(tǒng)本身也是使用線程來(lái)維護(hù)N個(gè)socket連接,在傳統(tǒng)的java編程中,你還必須為這些socket還多起一個(gè)java線程,那至少是2N個(gè)線程,現(xiàn)在只需要N+1。在高并發(fā)的情況下,你自己去想吧。

    懂了這個(gè)道理,異步socket也就好寫(xiě)了,也不會(huì)搞得思路混亂了。

    三、 異步Socket中應(yīng)當(dāng)注意的事情

    1. 讀

    異步socket最基本的理念就是事件通知,前面也說(shuō)了,有事件通知你了,你才該做你應(yīng)當(dāng)做的事情。在異步socket中當(dāng)注冊(cè)了一個(gè)OP_READ事件后,你就等著Selector通知你吧,如果沒(méi)有通知你,你在家睡大覺(jué)都行。
    在這里,我們有人出現(xiàn)的錯(cuò)誤就是受同步的影響,自己去主動(dòng)讀,而且還搞出了多線程,如果仔細(xì)考慮一下,就不會(huì)出現(xiàn)這個(gè)問(wèn)題了。同步socket中,調(diào)用read方法讀取IO中的數(shù)據(jù)時(shí),通常情況下如果沒(méi)有數(shù)據(jù)read方法會(huì)阻塞,且是同步的,所以當(dāng)多個(gè)線程同時(shí)訪問(wèn)時(shí),read方法是線程安全的。

    而在異步下就不同,異步是不會(huì)阻塞的,有什么就返回什么,你主動(dòng)去讀,只要有數(shù)據(jù),你就可以拿走,在多線程的情況下,也許你是想讓第一個(gè)線程讀取,but此時(shí)來(lái)數(shù)據(jù)時(shí)正好是線程2讀到了,那線程2就高高興興的拿去,而線程1還在苦苦等待,這樣導(dǎo)致數(shù)據(jù)混亂不說(shuō),如果后面再也不來(lái)數(shù)據(jù)了,線程1就是死循環(huán)啦。

    2. 寫(xiě)

    在異步socket中,寫(xiě)是唯一一個(gè)主動(dòng)點(diǎn)的操作,但是也不能直接去寫(xiě)Channel,而是應(yīng)當(dāng)先把自身注冊(cè)為OP_WRITABLE,這時(shí)Selector就會(huì)發(fā)現(xiàn)你的存在,并把給發(fā)一個(gè)write事件,你這時(shí)后就可以寫(xiě)了,不過(guò)這時(shí)候有個(gè)小小的技巧,就是你執(zhí)行寫(xiě)操作之前,請(qǐng)取消掉你的寫(xiě)注冊(cè),否則你的cpu肯定是100%。

    3. 等待

    在傳統(tǒng)的服務(wù)器編程中,由于對(duì)于每個(gè)請(qǐng)求都是產(chǎn)生的一個(gè)線程,因此你在你每個(gè)請(qǐng)求線程中wait也好,sleep也好,不會(huì)影響別人。但是異步不同,他的主線程只有一個(gè),基本上每個(gè)處理都是線性的,也就是說(shuō)處理完第一個(gè),然后才能處理第二個(gè),因此nio是一個(gè)極好的處理短連接的架構(gòu)。

    我們現(xiàn)在出現(xiàn)的問(wèn)題是,有人受同步的影響,沒(méi)有搞清異步是如何處理,竟然在方法處理中用上sleep,而且一等還是3秒,這意味著什么,3秒才能處理一個(gè)請(qǐng)求,My
    god,我要一個(gè)3秒才能處理一個(gè)請(qǐng)求的服務(wù)器干嘛啊,還是60年代啊:(

    如果出現(xiàn)這樣的需要等待的情況,應(yīng)當(dāng)另起一個(gè)線程(推薦使用線程池)去完成這個(gè)“長(zhǎng)”時(shí)間的任務(wù),或者將其它交給一個(gè)消息隊(duì)列,通過(guò)發(fā)消息的方式將給別人去完成也行,客戶端能等,你服務(wù)器怎么也能等呢?寫(xiě)出這樣的代碼,基本上一個(gè)服務(wù)器也就廢了。

    贊(0)
    分享到: 更多 (0)
    ?
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
    久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
    麻豆久久久久久| 亚洲一区观看| 一区二区三区四区日韩| 久久成人亚洲| 免费精品视频在线| 日本一区二区中文字幕| 亚洲精品影视| 日韩精品导航| 国产精品1区| 激情综合婷婷| 91精品一区二区三区综合| 激情欧美一区二区三区| 国产精品美女久久久| 亚洲制服一区| 国产精品久久久一区二区| 久久精品一本| 成人自拍av| 欧美性感美女一区二区| 国产精品日本欧美一区二区三区| 午夜在线视频一区二区区别 | 欧美日韩一区二区三区四区在线观看| 欧美精品福利| 9999国产精品| 91久久在线| 日本欧美一区二区在线观看| 国产精品丝袜在线播放| 黄色网一区二区| 今天的高清视频免费播放成人| 国产精品婷婷| 国产麻豆一区二区三区| 精品国产一区二区三区av片| av免费不卡国产观看| 日韩中文首页| 中文日韩在线| 国产精品九九| 亚洲成人精品| 日本亚洲最大的色成网站www| 美女视频免费精品| 欧美福利一区| 日韩不卡在线观看日韩不卡视频| 久久精品国产精品亚洲毛片| 国产一区欧美| 日韩va欧美va亚洲va久久| 91欧美在线| 老牛影视一区二区三区| 久久91视频| 性欧美69xoxoxoxo| 国产欧美亚洲一区| 亚洲电影在线| 国产精品1luya在线播放| 欧美影院三区| 国产精品国码视频| 合欧美一区二区三区| 国产精品九九| 久久午夜影视| 日韩久久精品网| 日韩精品三区四区| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲欧美视频| 老牛影视精品| 日本91福利区| 国产99精品一区| 国产精品一区二区精品| 黄色日韩在线| 精品国产aⅴ| 亚洲精品字幕| 日本综合字幕| 欧美日本一区| 99国产一区| 国产精品原创| 日韩高清不卡一区| 女同性一区二区三区人了人一 | 日韩国产在线一| 成人午夜国产| 国产日产一区| 视频一区国产视频| 日韩欧美二区| 国产日韩一区二区三区在线| av亚洲免费| 成人在线视频中文字幕| 日本a级不卡| 爽好久久久欧美精品| 国产精品久久久久av电视剧| 国产精品任我爽爆在线播放| 蜜桃视频在线观看一区二区| 久久久亚洲一区| 精品中文字幕一区二区三区四区| 中文字幕免费精品| 狠狠久久婷婷| а√天堂8资源在线| 国产欧美日韩一区二区三区在线| 日韩精品一区第一页| 亚洲h色精品| 不卡专区在线| 久久中文字幕一区二区| 日韩超碰人人爽人人做人人添| 国产午夜精品一区二区三区欧美 | 国产伦精品一区二区三区在线播放| 在线亚洲自拍| 久久国产日韩| 成人日韩在线观看| 成人国产精品一区二区免费麻豆| 国产亚洲欧美日韩精品一区二区三区 | 久久精品二区三区| 国产99在线| 狠狠久久伊人中文字幕| 欧美国产极品| 欧美中文一区| 日本午夜免费一区二区| 亚洲精品精选| 亚洲人成毛片在线播放女女| 亚洲一区日韩| 久久福利精品| 男女男精品网站| 老牛国产精品一区的观看方式| 日韩午夜av| 亚洲欧美日本视频在线观看| 久久婷婷亚洲| 婷婷综合亚洲| 一本色道久久精品| 午夜在线一区| 免费人成精品欧美精品| 好看不卡的中文字幕| 最新亚洲一区| 蜜臀91精品一区二区三区| 中文无码久久精品| 亚洲精品一二三**| 婷婷视频一区二区三区| 日韩不卡手机在线v区| 欧美另类中文字幕| 国产激情欧美| 国产精品精品| 视频福利一区| 99国产一区| 中文字幕亚洲在线观看| 色综合视频一区二区三区日韩 | 精品丝袜在线| 欧美亚洲精品在线| 国产精品女主播一区二区三区| 日韩中文字幕不卡| 欧美亚洲三区| 成人在线观看免费视频| 中国字幕a在线看韩国电影| 日韩欧美精品| 国产视频亚洲| 欧美亚洲三区| 精品国产一区二区三区性色av| 岛国av在线播放| 国产综合精品| 亚洲三级网址| 欧美黑人做爰爽爽爽| а√天堂8资源在线| 不卡一区2区| 日本中文字幕一区二区| 欧美国产日本| 欧美sm一区| 欧美精品一线| 日韩精品免费一区二区夜夜嗨| 国产精品久久亚洲不卡| 97se综合| 免费看日韩精品| 国产精品久久久久久久久久妞妞| аⅴ资源天堂资源库在线| 狠狠爱成人网| 日本午夜精品一区二区三区电影| 美女免费视频一区| 在线成人直播| 国产精品一区毛片| 久久中文视频| 日本午夜精品久久久久| 国产精品久久久久久久久久10秀| 伊人久久亚洲美女图片| 国产精品资源| 在线日韩一区| 欧美日韩视频免费看| 欧美不卡高清一区二区三区| 国产亚洲一区在线| 久久三级毛片| 天堂va蜜桃一区二区三区| 麻豆91在线播放| 尤物在线精品| 久久不见久久见国语| 国产亚洲亚洲| 国产 日韩 欧美 综合 一区| 亚洲激精日韩激精欧美精品| 国产精品美女在线观看直播 | 亚洲播播91| 日本精品在线播放| 精品国模一区二区三区| 亚洲精品进入| 日本高清不卡一区二区三区视频| 亚洲ab电影| 亚洲网站视频| 免费亚洲一区| 亚洲欧美在线专区| 91精品婷婷色在线观看| 国产精品黄网站| 鲁大师影院一区二区三区| 91亚洲国产成人久久精品| 日韩精品高清不卡|