摘要:需要先對的概念有一定的認識我們通常使用的打開文件關閉文件讀讀寫寫這叫本地文件而在編程中本質其實是網絡同步異步阻塞非阻塞之前反正一直搞不清楚同步和阻塞異步和非阻塞的概念總感覺同步就是阻塞異步就是非阻塞的總是搞得暈乎乎的于是就重新查了些資料進行
IO
需要先對 IO 的概念有一定的認識:
我們通常使用php的fopen打開文件關閉文件讀讀寫寫, 這叫本地文件IO;
而在socket編程中, 本質其實是網絡IO;
同步異步阻塞非阻塞之前反正一直搞不清楚同步和阻塞, 異步和非阻塞的概念, 總感覺同步就是阻塞, 異步就是非阻塞的, 總是搞得暈乎乎的, 于是就重新查了些資料進行了梳理, 如有不對歡迎大家指正;
簡單來說同步: 同步體現在, 在等待一件事情的處理結果時, 對方是否提供通知服務, 如果對方不提供通知服務, 則為 同步;
異步: 異步體現在, 在等待一件事情的處理結果時, 對方是否提供通知服務, 如果對方提供通知服務, 則為 異步;
對于常見的Ajax請求, 前端在ajax請求后通常還會執行一些其他加載操作(非阻塞); 在server端處理完后, 會將數據"通知"到前端頁面;
而對于最近正好在看的RabbitMQ消息隊列系統, 雖然本質上來說也是異步的(它是通過分隔了數據的發送和接收來解耦應用, 數據在最終被消費者處理完后也不會通知到生產者, 因為消息系統采用了很多手段如持久化, 重試等來確保消息一定會被執行), 但實質上, 消息會在發送成功后會立即得到響應, 所以單就生產者成功生產消息這一步來說, 其實是同步的;
阻塞: 阻塞體現在, 在等待一件事情的處理結果時, 你是否還去干點其他的事情, 如果不去, 則為 阻塞;
非阻塞: 非阻塞體現在, 在等待一件事情的處理結果時, 你是否還去干點其他的事情, 如果去了, 則為 非阻塞;
結合例子來說此處找了一位朋友寫的例子, 感覺很不錯
同步阻塞: 你去 甜在心饅頭 店買太極饅頭, 阿梅說:"暫時沒, 正在蒸呢, 你自己看著點兒!", 于是你就站在旁邊只等饅頭, 此時的你, 是阻塞的, 也是同步的;
阻塞表現在你除了等饅頭,別的什么都不做了;
同步表現在等饅頭的過程中, 阿梅不提供通知服務, 你不得不自己主動檢查 "饅頭出爐" 的消息;
同步非阻塞: 你去甜在心饅頭店買太極饅頭, 阿梅說:"暫時沒, 正在蒸呢, 你自己看著點兒!", 于是你就站在旁邊發發微信, 然后問一句:"好了沒?", 然后玩玩QQ游戲, 然后再問一句:"好了沒?", 此時的你, 是非阻塞的, 不過卻還是同步的;
非阻塞表現在你除了等饅頭, 自己還在干別的事情;
同步表現在等饅頭的過程中, 由于阿梅不提供通知服務, 你不得不自己主動檢查 "饅頭出爐" 的消息;
異步阻塞: 你去甜在心饅頭店買太極饅頭, 阿梅說:"暫時沒, 正在蒸呢, 蒸好了我打電話告訴你!", 但你依然站在旁邊只等饅頭, 此時的你, 是阻塞的, 是異步的;
阻塞表現在你除了等饅頭, 也沒去干點別的什么(比如玩玩手機啥的);
異步表現在等饅頭的過程中, 阿梅提供電話通知"饅頭出爐"的消息, 你只需要等阿梅的電話;
異步非阻塞: 你去甜在心饅頭店買太極饅頭, 阿梅說:"暫時沒, 正在蒸呢, 蒸好了我打電話告訴你!", 于是你就走了, 去買了雙新球鞋, 看了看武館, 總之, 從此不再過問饅頭的事情, 一心只等阿梅電話, 此時的你, 是非阻塞的, 是異步的
非阻塞表現在你除了等饅頭, 自己還去干點別的事情;
異步表現在等饅頭的過程中, 阿梅提供電話通知"饅頭出爐"的消息, 你只需要等阿梅的電話;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30774.html
摘要:心塞塞根據規范,事件循環是通過任務隊列的機制來進行協調的。等便是任務源,而進入任務隊列的是他們指定的具體執行任務回調函數。然后當前本輪的結束,主線程可以繼續取下一個執行。 依然是:經濟基礎決定上層建筑。 說明 首先,旨在搞清常用的同步異步執行機制 其次,暫時不討論node.js的Event Loop執行機制,以下關于瀏覽器的Event Loop執行機制 最后,借鑒了很多前輩的研究文...
摘要:的出現解決了這尷尬的問題,非阻塞模式下,通過,我們的線程只為已就緒的通道工作,不用盲目的重試了。注意要將注冊到,首先需要將設置為非阻塞模式,否則會拋異常。 同步、異步、阻塞、非阻塞首先,這幾個概念非常容易搞混淆,但NIO中又有涉及,所以總結一下[1]。 同步:API調用返回時調用者就知道操作的結果如何了(實際讀取/寫入了多少字節)。 異步:相對于同步,API調用返回時調用者不知道操作...
摘要:父進程調用創建子進程。因而,一個進程的第一個線程會隨著這個進程的啟動而創建,這個線程被稱為該進程的主線程。另一方面,線程不可能獨立于進程存在。終止線程線程可以通過多種方式來終結同一個進程中的其他線程。 前言 不積跬步,無以至千里;不積小流,無以成江海。在學習Java多線程相關的知識前,我們首先需要去了解一點操作系統的進程、線程以及相關的基礎概念。 進程 通常,我們把一個程序的執行稱為一...
摘要:例如處理請求的線程處理事件的線程定時器線程讀寫文件的線程例如在中等等。事件循環事件循環是指主線程重復從消息隊列中取消息執行的過程。事件觸發時,表示異步任務完成,會將事件監聽器函數封裝成一條消息放到消息隊列中,等待主線程執行。 一. 單線程 我們常說JavaScript是單線程的。 所謂單線程,是指在JS引擎中負責解釋和執行JavaScript代碼的線程只有一個。不妨叫它主線程。 但是實...
摘要:最近在學習網絡編程和相關的知識,了解到是模式的網絡框架,但是提供了不同的來支持不同模式的網絡通信處理,包括同步異步阻塞和非阻塞。因為的版本使用的的模式,而則希望使用模式,而且版本沒有將的部分配置項暴露出來,比如說和。 ??最近在學習Java網絡編程和Netty相關的知識,了解到Netty是NIO模式的網絡框架,但是提供了不同的Channel來支持不同模式的網絡通信處理,包括同步、異步、...
閱讀 2943·2023-04-25 19:08
閱讀 1428·2021-11-16 11:45
閱讀 1991·2021-10-13 09:40
閱讀 4160·2021-09-30 09:47
閱讀 2425·2019-08-30 15:44
閱讀 2303·2019-08-30 13:03
閱讀 1401·2019-08-30 12:56
閱讀 1901·2019-08-26 14:04