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

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

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

NIO出現(xiàn)后,好像讓java的程序員有了楊眉吐氣的機會,怎么個吐氣法,當時大家是個什么感受,俺是不知道,因為當時俺不搞java,對java的認識有限。

AD:

    一、NIO的出現(xiàn)

    NIO是JDK1.4里面才出現(xiàn)的東東,他給大家?guī)淼淖畲蠛锰幨钱惒絪ocket。其它file,pipe暫時就不多談了。

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

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

    NIO出現(xiàn)后,好像讓java的程序員有了楊眉吐氣的機會,怎么個吐氣法,當時大家是個什么感受,俺是不知道,因為當時俺不搞java,對java的認識有限。

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

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

    現(xiàn)在研究了NIO以后,發(fā)現(xiàn)NIO實際上在Java中做的工作是很簡單,就是將事件進行收集和分發(fā),我們結(jié)合一個經(jīng)典的調(diào)用例子來說明這個問題,我就不從NIO的基本使用說起了,大家可以查其它的資料,網(wǎng)上一大把。
    當Channel注冊至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. }
     

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

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

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

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

    懂了這個道理,異步socket也就好寫了,也不會搞得思路混亂了。

    三、 異步Socket中應當注意的事情

    1. 讀

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

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

    2. 寫

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

    3. 等待

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

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

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

    贊(0)
    分享到: 更多 (0)
    ?
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
    久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
    九九综合九九| 日本综合精品一区| 先锋影音久久久| 亚洲综合在线电影| 精品国产18久久久久久二百| 日韩精品午夜视频| 麻豆91精品| 免费人成在线不卡| 精品亚洲精品| 黄色网一区二区| 精品国产一区二区三区噜噜噜| 国产乱人伦丫前精品视频| 蜜臀久久99精品久久久久久9| 亚洲中午字幕| 亚洲日本免费电影| 国产探花一区| 首页国产精品| 香蕉成人av| 日韩欧美一区二区三区免费看| 国产精品成久久久久| www.com.cn成人| 欧美片第1页| 伊人久久婷婷| 日韩久久一区二区三区| 日本久久成人网| 午夜精品成人av| 欧美大黑bbbbbbbbb在线| 国产一区日韩欧美| 蜜臀久久久99精品久久久久久| 日韩专区视频网站| 中文av在线全新| 在线一区电影| 国产乱子精品一区二区在线观看 | 中文字幕系列一区| 亚洲ab电影| 国内自拍视频一区二区三区| 亚洲va中文在线播放免费| 中文一区一区三区高中清不卡免费| 精品日韩在线| 午夜精品成人av| 久久国产精品毛片| 欧美aaaaaa午夜精品| 婷婷色综合网| 日韩和欧美一区二区三区| аⅴ资源天堂资源库在线| 伊人影院久久| 久久久男人天堂| 电影91久久久| 日产欧产美韩系列久久99| 亚洲欧洲高清| 欧美特黄a级高清免费大片a级| 日本精品不卡| 欧美一区二区三区激情视频| 日韩成人a**站| 日本久久综合| 国产精品jk白丝蜜臀av小说| 日韩精品视频在线看| 石原莉奈一区二区三区在线观看| 日韩成人精品一区二区| 综合激情视频| 狠狠久久婷婷| 巨乳诱惑日韩免费av| 91九色精品| 国产精品久久观看| 视频二区不卡| 正在播放日韩精品| 香蕉成人av| 欧美激情国产在线| 91日韩免费| 亚洲手机视频| 首页亚洲欧美制服丝腿| 国产亚洲午夜| 中文字幕一区二区精品区| 国产亚洲精品美女久久久久久久久久| 99精品在线观看| 日本免费一区二区三区四区| 久久精品日韩欧美| 激情中国色综合| 吉吉日韩欧美| 91精品婷婷色在线观看| 国产精品亚洲片在线播放| 国产色噜噜噜91在线精品| 日韩国产在线观看一区| 嫩草伊人久久精品少妇av杨幂| 国产高清日韩| 国产精品久久久久蜜臀 | 蜜桃视频欧美| 日韩视频在线一区二区三区| 一本一本久久| 午夜在线视频观看日韩17c| 欧美在线影院| 亚洲久久视频| 欧美激情亚洲| 国产91在线播放精品| 成人久久一区| 亚洲精品三级| www.51av欧美视频| 丝袜美腿高跟呻吟高潮一区| 国产精品尤物| 欧美综合另类| 国产情侣一区在线| 亚洲一级特黄| 老司机免费视频一区二区| 合欧美一区二区三区| 国产欧美日韩在线观看视频| 日韩免费av| 日韩激情av在线| 久久精品国内一区二区三区水蜜桃| 欧美一区二区三区激情视频| 日韩综合一区二区| 99久久激情| 国产精品亲子伦av一区二区三区| 欧美手机在线| 中文在线а√在线8| 国产欧美一区二区三区国产幕精品 | 久久精品国产999大香线蕉| 鲁大师影院一区二区三区| 日韩电影二区| 亚洲一区区二区| 99精品电影| 欧美丰满日韩| 国产一区三区在线播放| 国产精品国码视频| 日韩激情中文字幕| 只有精品亚洲| 韩日一区二区| 亚洲精品大片| 国产精品国码视频| 亚洲国内欧美| 日韩精品中文字幕第1页| 午夜久久av| 亚洲成人一区| 亚洲一区区二区| 麻豆91精品视频| 日本伊人午夜精品| 鲁大师成人一区二区三区| 日韩成人亚洲| 成人在线超碰| 欧美日韩 国产精品| 美女精品在线| 国精品一区二区三区| 国产一区亚洲| 欧美日韩视频免费观看| 国产videos久久| 国产精品99在线观看| 国产精品亚洲成在人线| 国产亚洲欧美日韩精品一区二区三区 | 久久久久欧美精品| 鲁鲁在线中文| 欧美国产偷国产精品三区| 国产亚洲第一伦理第一区| 蜜桃av一区二区在线观看| 夜夜嗨一区二区| 欧美日韩尤物久久| 久久精品成人| 亚洲字幕久久| 国产精品视频一区二区三区四蜜臂| 亚洲麻豆一区| 亚洲开心激情| 日韩影片在线观看| 成人污污视频| 99久久久久国产精品| 在线成人直播| 日韩黄色在线观看| 国产精品黄色| 欧美日韩夜夜| 国模精品一区| 黄色成人91| 国产亚洲高清一区| 99久久久久国产精品| 婷婷丁香综合| 亚洲乱码久久| 国产极品模特精品一二| 国产精品1luya在线播放| 久久视频精品| 亚洲ww精品| 日韩久久精品| 日本精品久久| 精品精品99| 日韩专区视频网站| 蜜臀久久99精品久久久久久9 | 天堂√8在线中文| 亚洲伊人精品酒店| 久久久免费人体| 国产模特精品视频久久久久| sm久久捆绑调教精品一区| 日本在线观看不卡视频| 久久一区二区三区电影| 欧美激情麻豆| 91精品美女| 三级在线观看一区二区| 日韩在线不卡| 日韩国产在线观看| 中文久久精品| 欧美xxxx中国| 国产精品日本| 欧美偷窥清纯综合图区| 日韩精品中文字幕吗一区二区| 日韩啪啪电影网| 97人人精品|