同步、異步、阻塞、非阻塞區別

同步、異步、阻塞、非阻塞
1.同步和異步的區別:
    是否有回調。
    如:本身去食堂排隊買飯是同步,叫外賣是異步。linux


2.阻塞和非阻塞的區別:
    是否有輔助線程輪詢,把完成結果通知真正用戶線程。多線程

    若是是用戶本身輪詢那就叫同步非阻塞,若是是別人幫忙輪詢並通知用戶線程叫異步非阻塞。
    如,10我的去酒吧看世界盃,這時候安排一個服務生盯着電視,其餘人都去各類happy,若是球賽開始,服務生會通知你們。這就是非阻塞。
            10我的去酒吧看世界盃,若是10我的什麼也不幹,就這麼一直盯着電視等着球賽開始,這就是阻塞。app

 

如下是轉載:異步

同步、異步:函數

  • 概念:消息的通知機制
  • 解釋:涉及到IO通知機制;所謂同步,就是發起調用後,被調用者處理消息,必須等處理完才直接返回結果,沒處理完以前是不返回的,調用者主動等待結果;所謂異步,就是發起調用後,被調用者直接返回,可是並無返回結果,等處理完消息後,經過狀態、通知或者回調函數來通知調用者,調用者被動接收結果。

阻塞、非阻塞:

  • 概念:程序等待調用結果時的狀態
  • 解釋:涉及到CPU線程調度;所謂阻塞,就是調用結果返回以前,該執行線程會被掛起,不釋放CPU執行權,線程不能作其它事情,只能等待,只有等到調用結果返回了,才能接着往下執行;所謂非阻塞,就是在沒有獲取調用結果時,不是一直等待,線程能夠往下執行,若是是同步的,經過輪詢的方式檢查有沒有調用結果返回,若是是異步的,會通知回調。

經典故事案例:(事實證實普通的水壺能夠作到非阻塞,相比於高級水壺須要加一個輪詢線程)

  • 人物:老張
  • 道具:普通水壺(水燒開不響);響水壺(水燒開發出響聲)
  • 案例:

                       一、同步阻塞:spa

                             老張在廚房用普通水壺燒水,一直在廚房等着(阻塞),盯到水燒開(同步);線程

                       二、異步阻塞:blog

                             老張在廚房用響水壺燒水,一直在廚房中等着(阻塞),直到水壺發出響聲(異步),老張知道水燒開了;開發

                       三、同步非阻塞:回調函數

                             老張在廚房用普通水壺燒水,在燒水過程當中,就到客廳去看電視(非阻塞),而後時不時去廚房看看水燒開了沒                                                           (輪詢檢查同步結果);

                       四、異步非阻塞:

                             老張在廚房用響水壺燒水,在燒水過程當中,就到客廳去看電視(非阻塞),當水壺發出響聲(異步),老張就知道                                                        水燒開了。

 

注意:

         一、一般的IO、NIO操做,都是同步的;

         二、JDK1.7提供了AIO異步操做的類,如AsynchronousSocketChannel、AsynchronousServerSocketChannel等;

               Java也能夠經過多線程,在開啓的線程中,經過回調方式,實現異步操做。

 

 

linux下5中IO模型

相關文章
相關標籤/搜索