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