国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

阻塞,非阻塞,同步,異步

2019-11-06 06:04:02
字體:
來源:轉載
供稿:網友

同步和異步

同步和異步是針對應用程序和內核交互而言的, 同步過程中進程觸發IO操作并等待或者輪訓的去查看IO操作是否完成, 異步過程中進程觸發IO操作后, 直接返回, 做自己的事, IO交給內核操作處理, 完成后內核通知進程IO完成 .

阻塞和非阻塞

簡單理解需要做一件事能不能立即得到返回應答, 如果不能立即獲得返回, 需要等待, 那就是阻塞了 . 否則理解為非阻塞 . 多線程中使用synchronized, 多個線程操作共享資源, 如果一個線程獲得鎖, 其他線程就會阻塞直到這個線程釋放鎖. 多線程中使用了CAS, 相當于非阻塞模式, 如果得不到應答或者預期結果就會返回, 進行下一步處理, 而不會一直阻塞. AtomicInteger中幾段代碼: 這里寫圖片描述 這里寫圖片描述 當AtomicInteger進行++i操作, for循環中一直進行compareAndSet操作, 多線程情況下進行++i, 并沒有鎖的概念, 沒有等待, 而是查看預期值和當前值是否相同如果不同就直接返回false, 返回false之后, 程序還會一直執行compareAndSet操作, 直到返回true. 所以這里并沒有阻塞情況出現.

IO中概念理解

同步阻塞 IO(等待沒有立即返回) : 在此種方式下,用戶進程在發起一個 IO 操作以后,必須等待 IO 操作的完成,只有當真正完成了 IO 操作以后,用戶進程才能運行。 java傳統的 IO 模型屬于此種方式!同步非阻塞 IO(輪訓立即返回): 在此種方式下,用戶進程發起一個 IO 操作以后 邊可 返回做其它事情,但是用戶進程需要時不時的詢問 IO 操作是否就緒,這就要求用戶進程不停的去詢問,從而引入不必要的 CPU 資源浪費。其中目前 JAVA 的 NIO 就屬于同步非阻塞 IO 。

異步阻塞 IO : 此種方式下是指應用發起一個 IO 操作以后,不等待內核 IO 操作的完成,等內核完成 IO 操作以后會通知應用程序,這其實就是同步和異步最關鍵的區別,同步必須等待或者主動的去詢問 IO 是否完成,那么為什么說是阻塞的呢?因為此時是通過 select 系統調用來完成的,而 select 函數本身的實現方式是阻塞的,而采用 select 函數有個好處就是它可以同時監聽多個文件句柄,從而提高系統的并發性!

異步非阻塞 IO(通知立即返回): 在此種模式下,用戶進程只需要發起一個 IO 操作然后立即返回,等 IO 操作真正的完成以后,應用程序會得到 IO 操作完成的通知,此時用戶進程只需要對數據進行處理就好了,不需要進行實際的 IO 讀寫操作,因為 真正的 IO讀取或者寫入操作已經由 內核完成了。目前 Java 中還沒有支持此種 IO 模型。


java的NIO屬于同步非阻塞IO, 應用進行IO操作會立即返回標示, 然后應用會一直輪訓詢問IO是否操作完成 .


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荆州市| 万载县| 周口市| 丹巴县| 罗江县| 揭西县| 九台市| 万安县| 长兴县| 奇台县| 沾益县| 新密市| SHOW| 濮阳县| 嘉兴市| 夏邑县| 平原县| 边坝县| 玉田县| 罗田县| 砀山县| 玉龙| 航空| 开阳县| 信丰县| 锡林郭勒盟| 沙湾县| 万宁市| 祁连县| 福建省| 呼玛县| 伊宁市| 胶州市| 防城港市| 虎林市| 新乡县| 石嘴山市| 盐城市| 怀安县| 太湖县| 北海市|