同步、異步、阻塞、非阻塞
1.同步和異步的區別:
是否有回調。
如:本身去食堂排隊買飯是同步,叫外賣是異步。linux
2.阻塞和非阻塞的區別:
是否有輔助線程輪詢,把完成結果通知真正用戶線程。多線程
若是是用戶本身輪詢那就叫同步非阻塞,若是是別人幫忙輪詢並通知用戶線程叫異步非阻塞。
如,10我的去酒吧看世界盃,這時候安排一個服務生盯着電視,其餘人都去各類happy,若是球賽開始,服務生會通知你們。這就是非阻塞。
10我的去酒吧看世界盃,若是10我的什麼也不幹,就這麼一直盯着電視等着球賽開始,這就是阻塞。app
如下是轉載:異步
同步、異步:函數
一、同步阻塞:spa
老張在廚房用普通水壺燒水,一直在廚房等着(阻塞),盯到水燒開(同步);線程
二、異步阻塞:blog
老張在廚房用響水壺燒水,一直在廚房中等着(阻塞),直到水壺發出響聲(異步),老張知道水燒開了;開發
三、同步非阻塞:回調函數
老張在廚房用普通水壺燒水,在燒水過程當中,就到客廳去看電視(非阻塞),而後時不時去廚房看看水燒開了沒 (輪詢檢查同步結果);
四、異步非阻塞:
老張在廚房用響水壺燒水,在燒水過程當中,就到客廳去看電視(非阻塞),當水壺發出響聲(異步),老張就知道 水燒開了。
注意:
一、一般的IO、NIO操做,都是同步的;
二、JDK1.7提供了AIO異步操做的類,如AsynchronousSocketChannel、AsynchronousServerSocketChannel等;
Java也能夠經過多線程,在開啓的線程中,經過回調方式,實現異步操做。
linux下5中IO模型