1. 程式人生 > >從分散式系統角度的回答阻塞非阻塞與同步非同步的區別

從分散式系統角度的回答阻塞非阻塞與同步非同步的區別

“阻塞”與"非阻塞"與"同步"與“非同步"不能簡單的從字面理解,提供一個從分散式系統角度的回答。
1.同步與非同步
同步和非同步關注的是訊息通訊機制 (synchronous communication/ asynchronous communication)
所謂同步,就是在發出一個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。
換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。

而非同步則是相反,*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在*呼叫*發出後,*被呼叫者*通過狀態、通知來通知呼叫者,或通過回撥函式處理這個呼叫。


典型的非同步程式設計模型比如Node.js

舉個通俗的例子:
你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果。
而非同步通訊機制,書店老闆直接告訴你我查一下啊(返回值),查好了打電話給你,然後直接掛電話了。然後查好了,他會主動打電話給你。在這裡老闆通過“回電”這種方式來回調。

2. 阻塞與非阻塞
阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態.

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。
非阻塞呼叫指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。


還是上面的例子,
你打電話問書店老闆有沒有《分散式系統》這本書,你如果是阻塞式呼叫,你會一直把自己“掛起”,直到得到這本書有沒有的結果,如果是非阻塞式呼叫,你不管老闆有沒有告訴你,你自己先一邊去玩了, 當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。
在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。


如果是關心blocking IO/ asynchronous IO, 參考 Unix Network Programming View Book

相關推薦

分散式系統角度回答阻塞阻塞同步非同步區別

“阻塞”與"非阻塞"與"同步"與“非同步"不能簡單的從字面理解,提供一個從分散式系統角度的回答。1.同步與非同步同步和非同步關注的是訊息通訊機制 (synchronous communication/ asynchronous communication)所謂同步,就是在

Python基礎(八)-系統程式設計之程序--multiprocessing(阻塞阻塞

程序擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,程序由作業系統排程。 執行緒擁有自己獨立的棧和共享的堆,共享堆,不共享棧,執行緒亦由作業系統排程(標準執行緒是的)。 協程和執行緒一樣共享堆,不共享棧,協程由程式設計師在協程的程式碼裡顯示排程 multiproces

同步非同步阻塞阻塞到5種IO模型

同步非同步、阻塞非阻塞 同步與非同步 同步與非同步在不同的場景下有不同的概念,在IO模型中的同步非同步,主要區別在當任務A呼叫任務B的過程中,程序A是否繼續進行。 如果A等待B的結果,則為同步 如果A不等待B的結果,則為非同步 同步狀態下任務A的

理解阻塞阻塞同步異步

返回 check 發出 幾分鐘 分布 才會 理解 ica 消息 作者:嚴肅鏈接:https://www.zhihu.com/question/19732473/answer/20851256來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 “

怎樣理解阻塞阻塞同步異步的區別

得到 同步 線程 關註 ron 模型 主動 人物 而是 作者:嚴肅鏈接:https://www.zhihu.com/question/19732473/answer/20851256來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 &ld

網絡I/O模型---同步異步阻塞阻塞之惑

本質 結果 順序執行 其中 ges package 混合 signal 同時 網絡I/O模型 人多了,就會有問題。web剛出現的時候,光顧的人很少。近年來網絡應用規模逐漸擴大,應用的架構也需要隨之改變。C10k的問題,讓工程師們需要思考服務的性能與應用的並發能力。 網絡應

同步/異步,阻塞/阻塞

其他 不同 網卡 div ted 框架 異步執行 ant 系統數據 什麽是同步和異步 同步和異步是針對應用程序和內核的交互而言的, 同步指的是用戶進程觸發IO操作並等待或者輪詢的去查看IO操作是否就緒,而異步是指用戶進程觸發IO操作以後便開始做自己的事情,而當IO操作已經完

同步異步 阻塞阻塞

同步異步 相關 工作 不能 blog 在那 不用 lB 滿了 劫匪沖進某花園小別墅,端著AK47,向某衰男甩過去一個袋子:說,快,把現金拿出來給我放進去,這個時候劫匪一直跟著衰男去裝錢,看錢裝滿了他就拿走,此時劫匪是阻塞 的,因為劫匪不能幹其他的,得看著這個衰男,免得他搞

深入理解並發/並行,阻塞/阻塞同步/異步【轉】

非阻塞 n) 做的 耗時 非阻塞socket 衣服 時間片輪轉 輪轉 理解 1、阻塞,非阻塞 首先,阻塞這個詞來自操作系統的線程/進程的狀態模型中,如下圖: 一個線程/進程經歷的5個狀態,創建,就緒,運行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是

阻塞(Blocking)阻塞(Non-Blocking)同步(Synchronous)異步(Asynchronous)

sync https 機制 ole 通信機制 syn 同步 ron tro 參考: http://blog.jobbole.com/103290/ https://www.zhihu.com/question/19732473/answer/23434554 http://

Node.js:創建應用+回調函數(阻塞/阻塞

我們 異步化 沒有 就會 幾分鐘 能說 image console cti 一、創建應用   如果我們使用PHP來編寫後端的代碼時,需要Apache 或者 Nginx 的HTTP 服務器,並配上 mod_php5 模塊和php-cgi。從這個角度看,整個"接收 HTTP 請

IO概念解析------同步異步阻塞阻塞

調用 net 阻塞 span 處理 過程 說明 例子 人做 各個IO Model的比較如圖所示: 阻塞和非阻塞強調的是程序在等待調用結果(消息,返回值)時的狀態. 阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之後才會返回。非阻塞調用指在不能立刻

同步異步阻塞阻塞可中斷的睡眠不可中斷的睡眠

執行時間 分支 但是 我們 多進程並發 預測 不支持 隊列實現 完成 同步:所有程序是按照一定邏輯先後順序執行的,前一個代碼沒有執行完成,後面的代碼不會執行。 異步:程序可能有若幹分支,各自的執行時間點沒有約束,也不可提前預測。 阻塞:阻塞指的是一個程序在執行的時候,沒有成

超雞容易理解的---同步異步,阻塞阻塞

點菜 擔心 窗口 aio 幫我 狀態 主動 書店 一段 快來看超雞容易理解的同步異步,阻塞非阻塞,再也不擔心理解晦澀的語言了。 阻塞和非阻塞指的是執行一個操作是等操作結束再返回,還是馬上返回。 比如餐館的服務員為用戶點菜,當有用戶點完菜後,服務員將菜單給後臺廚師,此時有兩種

深入理解並發/並行,阻塞/阻塞同步/異步

text 只有一個 ima UNC 不同 比較 callback 調度 狀態 首先,阻塞這個詞來自操作系統的線程/進程的狀態模型中,如下圖 : 一個線程/進程經歷的5個狀態,創建,就緒,運行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是說當線程中調用某個函

阻塞阻塞

阻塞和非阻塞 阻塞: = 可用在assign語句和always語句中, 表示只要源訊號發生變化,目標訊號就立刻完成賦值操作, 在always塊中,結果與語句順序有關, 在always塊中是順序關係 非阻塞:    &nbs

同步非同步阻塞阻塞區別聯絡

  實際上同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發IO操作並等待(也就是我們說的阻塞)或者輪詢的去檢視IO操作(也就是我們說的非阻塞)是否完成。 非同步過程中程序觸發IO操作以後,直接返回,做自己的事情,IO交給核心來處理,完成後核心通知程序IO完成。

同步非同步阻塞阻塞

今天突然看到同步非同步和阻塞非阻塞的問題,一度陷入迷茫,經過我努力的汲取知識,在這裡說下我的理解。 同步非同步:可以理解成這是一種行為。 阻塞非阻塞:可以理解成這是一種狀態。 舉一個我看到的很不錯的例子: 《張大爺燒水》 話說張大爺有兩隻壺,一隻是普通的燒水壺,一隻是有響笛的

Java NIO/BIO 淺談 同步/非同步阻塞/阻塞

在我們瞭解Java NIO/BIO的網路通訊之前,我們先了解一下常用的阻塞/非阻塞模型以及同步/非同步的概念 一、阻塞和非阻塞 從簡單的開始,我們以經典的讀取檔案的模型舉例。(對作業系統而言,所有的輸入輸出裝置都被抽象成檔案。)在發起讀取檔案的請求時,應用層會呼叫系統核心的I/O介面。

Python併發程式設計之同步\非同步and阻塞\非阻塞

一、什麼是程序 程序: 正在進行的一個過程或者說一個任務。而負責執行任務則是cpu。 程序和程式的區別: 程式僅僅只是一堆程式碼而已,而程序指的是程式的執行過程。 需要強調的是:同一個程式執行兩次,那也是兩個程序,比如開啟暴風影音,雖然都是同一個軟體,但是一個可以播郭德綱,一個可以播高曉鬆。 二、並行