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

站長資訊網
最全最豐富的資訊網站

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

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

AD:

    一、NIO的出現

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

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

    二、異步socket的實現

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

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

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

    現在研究了NIO以后,發(fā)現NIO實際上在Java中做的工作是很簡單,就是將事件進行收集和分發(fā),我們結合一個經典的調用例子來說明這個問題,我就不從NIO的基本使用說起了,大家可以查其它的資料,網上一大把。
    當Channel注冊至Selector以后,我們的最經典的調用方法,是這樣子的。

                                                     
    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ā)現這個值>0,表示有事件發(fā)生,馬上迭代selectedKeys中的SelectionKey,根據Key中的表示的事件,來做相應的處理。

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

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

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

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

    1. 讀

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

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

    2. 寫

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

    3. 等待

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

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

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

    贊(0)
    分享到: 更多 (0)
    ?
    網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
    久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
    久久av网站| 国产极品嫩模在线观看91精品| 国产伦理久久久久久妇女| 久久激情一区| 88xx成人免费观看视频库| 国产成人免费| zzzwww在线看片免费| 精品国产乱码久久久| 国产成人精品一区二区三区在线| 精品美女久久| 黑人精品一区| 久久久久99| 欧美日韩视频| 石原莉奈在线亚洲三区| 亚洲精品人人| 欧美日韩亚洲一区在线观看| 国产精品欧美三级在线观看| 久久只有精品| 久久久久亚洲精品中文字幕| 日本精品黄色| 久久黄色影院| 一区二区三区四区在线看| 亚洲黄色在线| 最新国产精品| 日韩一区二区三区免费视频| 中文无码久久精品| 亚洲精品福利| 欧美一区二区三区久久| 国产免费播放一区二区| 亚洲精品无吗| 欧美国产不卡| 亚洲黄色中文字幕| 欧美aa在线观看| 久久天堂成人| 激情视频网站在线播放色| 成人日韩av| 久久九九电影| 免费精品视频最新在线| 日韩国产在线一| 久久香蕉精品香蕉| 欧美日韩在线网站| 综合激情网...| 国产精品videosex极品| 亚洲www啪成人一区二区| 夜夜嗨av一区二区三区网站四季av| 日韩精品成人| 成人一区而且| 亚洲欧美久久| 天堂久久一区| 日韩欧美网址| 亚洲精品精选| 日产精品一区二区| 中文字幕亚洲影视| 国产一区二区三区不卡视频网站| 夜夜嗨网站十八久久| 国产亚洲字幕| 伊人精品一区| 欧美精品三级在线| 久久青草久久| 欧美三区不卡| 九一精品国产| 欧美私人啪啪vps| 久久国产主播| 婷婷五月色综合香五月| 99久久夜色精品国产亚洲1000部| 日韩欧美精品一区二区综合视频| 日韩精品永久网址| 天堂av一区| 999国产精品视频| 欧美日韩精品一区二区三区在线观看| 另类中文字幕国产精品| 国产日韩中文在线中文字幕| 婷婷激情久久| 国产精品v亚洲精品v日韩精品| 宅男在线一区| 精品午夜视频| 亚洲人成高清| 日本久久成人网| 青青伊人久久| 99精品视频精品精品视频| 欧美日本不卡高清| 香蕉久久国产| 精品国模一区二区三区| 欧美日韩亚洲一区在线观看| 亚洲黄页一区| 蜜臀久久精品| 欧美日韩一区二区国产| 久久xxxx| 视频二区不卡| 免费亚洲婷婷| 亚洲一区二区毛片| 精品久久精品| 国产日产精品_国产精品毛片| 不卡一二三区| 国产亚洲欧美日韩在线观看一区二区| 好吊日精品视频| 亚洲午夜天堂| 麻豆精品av| 国产欧美另类| 中文无码久久精品| 亚洲精品极品少妇16p| 成人影视亚洲图片在线| 国产精品一区二区精品| 日欧美一区二区| 三级欧美在线一区| 亚洲福利国产| 在线观看精品| 日本欧美国产| 免费在线欧美黄色| 青青草伊人久久| 天堂久久av| 亚洲免费资源| 丝袜美腿一区二区三区| 欧美 日韩 国产一区二区在线视频 | 狠狠色综合网| 欧美日韩精品免费观看视欧美高清免费大片| 国产精品一区二区三区四区在线观看 | 亚洲黑丝一区二区| 国产成人精品999在线观看| 国产精区一区二区| 日韩精品a在线观看91| 亚洲一区导航| 蜜臀精品久久久久久蜜臀| 亚洲美洲欧洲综合国产一区| 欧美大黑bbbbbbbbb在线| 亚洲高清激情| 午夜精品婷婷| 久久久久久久久丰满| 久久青草久久| 国产99精品| 激情婷婷综合| 亚洲成人三区| 欧美特黄一区| 免费日韩av| 香蕉久久一区| 国产欧美久久一区二区三区| 国产精品永久| 国内一区二区三区| 国产suv精品一区| 天堂av在线| 亚洲午夜精品久久久久久app| 午夜久久免费观看| 国产字幕视频一区二区| 五月天久久网站| 日韩制服丝袜av| 日本欧美一区| 国产精品亚洲综合色区韩国 | 国产精品亚洲综合久久| 久久精品国产亚洲aⅴ| 欧美a级一区二区| 亚洲va中文在线播放免费| 不卡一区2区| 亚洲精品伊人| 久久久91麻豆精品国产一区| 夜鲁夜鲁夜鲁视频在线播放| 欧美日韩国产观看视频| 国内精品99| 亚洲91在线| 国产精品久久久久久妇女| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 在线观看视频免费一区二区三区| 日本久久一区| 丰满少妇一区| 国产综合亚洲精品一区二| 日韩不卡在线观看日韩不卡视频| 日本少妇一区| 激情婷婷亚洲| а√在线中文在线新版| 中文字幕色婷婷在线视频| 精品亚洲a∨一区二区三区18| 成人午夜毛片| 91成人网在线观看| 日韩国产一二三区| av免费不卡国产观看| 99国内精品| 国产精品一区二区中文字幕| 樱桃视频成人在线观看| 免费欧美日韩| 精品色999| 欧美日韩精品免费观看视完整| 免费不卡在线视频| 久久亚洲人体| 91久久视频| 麻豆精品国产91久久久久久| 日韩一区二区免费看| 日本韩国欧美超级黄在线观看| 国产精品一区二区三区av麻| 亚洲精品少妇| 综合一区av| 免费在线看一区| 亚洲在线网站| 欧美特黄一级大片| 婷婷精品进入| 一区免费在线| 五月激情久久| 亚洲欧美综合| 热久久久久久久| 鲁大师精品99久久久| 久久中文在线| 亚洲播播91|