阻塞和非阻塞系統呼叫
阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在CSocket中呼叫Receive函式,如果緩衝區中沒有資料,這個函式就會一直等待,直到有資料才返回。而此時,當前執行緒還會繼續處理各種各樣的訊息。如果主視窗和呼叫函式在同一個執行緒中,除非你在特殊的介面操作函式中呼叫,其實主介面還是應該可以重新整理。socket接收資料的另外一個函式recv則是一個阻塞呼叫的例子。當socket工作在阻塞模式的時候,如果沒有資料的情況下呼叫該函式,則當前執行緒就會被掛起,直到有資料為止。
非阻塞
非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。
物件的阻塞模式和阻塞函式呼叫 物件是否處於阻塞模式和函式是不是阻塞呼叫有很強的相關性,但是並不是一一對應的。阻塞物件上可以有非阻塞的呼叫方式,我們可以通過一定的API去輪詢狀態,在適當的時候呼叫阻塞函式,就可以避免阻塞。而對於非阻塞物件,呼叫特殊的函式也可以進入阻塞呼叫。函式select就是這樣的一個例子。
相關推薦
阻塞和非阻塞系統呼叫
阻塞 阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在CSocket中呼叫Receive函式,如果緩衝區中沒有資料,這個函
6、阻塞和非阻塞
失敗 解決 實驗 file iostream pac \n std shell 讀常規文件是不會阻塞的,不管讀多少字節,read一定會在有限的時間內返回。但是從終端設備或網絡讀則不一定,如果從終端輸入的數據沒有換行符,調用read讀終端設備就會阻塞,如果網絡上沒有接收到
同步異步以及阻塞和非阻塞的區別
結束 線程 同步異步 成功 -s 區別 狀態 得到 概念 一、同步與異步的區別: 同步:一個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成後,才算完成,這是一種可靠的服務序列。要麽成功都成功,失敗都失敗,服務的狀態可以保持一致。 異步:一個服務的完成需要依賴其他
recv send 阻塞和非阻塞
int send( SOCKET s, const char FAR *buf, int len, int flags ); 不論是客戶還是伺服器應用程式都用send函式來向TCP連線的另一端傳送資料。客戶程式一般用send函式向伺服器傳送請求,而伺服器則通常用send函式來向客戶程式傳送應答。
C/C++網路程式設計在windows和linux中將socket設定為阻塞和非阻塞
C/C++網路程式設計在windows和linux中將socket設定為阻塞和非阻塞 在 socket程式設計中,對於socket的讀寫預設都是阻塞的,但有的情況我們需要將其設定為非阻塞,比如做多
什麼是同步和非同步,什麼是阻塞和非阻塞
同步和非同步是針對應用程式和核心的互動而言的,同步指的是使用者程序觸發IO操作並等待或者輪詢的去檢視IO操作是否就緒,而非同步是指使用者程序觸發IO操作以後便開始做自己的事情,而當IO操作已經完成的時候會得到IO完成的通知。 以銀行取款為例: 同步:自己親自出馬持銀行卡到銀行取錢(使用同
阻塞和非阻塞、同步和非同步
阻塞和非阻塞 阻塞呼叫是指呼叫結果返回之前,呼叫者會進入阻塞狀態等待。只有在得到結果之後才會返回。 非阻塞呼叫是指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。 2.同步與非同步 同步和非同步關注的是訊息通訊機制 (synchronous c
同步和非同步_阻塞和非阻塞
阻塞和非阻塞 執行緒去請求資源時,遇到資源正在處理還未準備就緒的情況的兩種處理方式: 阻塞:執行緒等待該資源準備就緒。呼叫結果返回之前,當前執行緒會被掛起。 非阻塞:執行緒發現該資源正在處理,會去請求別的資源 同步和非同步 訪問資料的兩種機制: 同步:請求資料時,等
談IO中的阻塞和非阻塞,同步和非同步及三種IO模型
什麼是同步和非同步? 燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麼發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科技的發展,現在市面上的水壺都有了提醒功能,當我們把水壺插電
談IO中的阻塞和非阻塞,同步和異步及三種IO模型
狀態 阻塞io 舉例 最大的 data- str 被調用 當我 返回 什麽是同步和異步? 燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麽發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科
阻塞和非阻塞
在介紹阻塞和非阻塞之前,我們先來了解一下多執行緒間一個重要的概念——臨界區。 臨界區——一種公有的資源或者共享資料,它可以被多個執行緒使用。臨界區資源一次只能被一個執行緒使用,其它執行緒必須等待上一個執行緒 執行完成之後,才能使用。臨界區資源是多執行緒之間
Java-併發-佇列-阻塞和非阻塞佇列總結
Java-併發-佇列-阻塞和非阻塞佇列總結 轉載宣告: 本文系轉載自以下文章: Java 併發 — 阻塞佇列總結 作者: thgreat java中併發集合 作者:hy飛無 0x01 摘要 本文會對java併發包內的常用重要阻塞/非阻塞佇列進行總結。
從 Linux 原始碼看 socket 的阻塞和非阻塞
從linux原始碼看socket的阻塞和非阻塞 筆者一直覺得如果能知道從應用到框架再到作業系統的每一處程式碼,是一件Exciting的事情。 大部分高效能網路框架採用的是非阻塞模式。筆者這次就從linux原始碼的角度來闡述socket阻塞(block)和非阻塞(non_block)的區別。 本文
C#裡面MessageBox不能亂用,阻塞和非阻塞,模態對話方塊和非模態
我一開始以為這個MessageBox跟Delphi裡面的ShowMessage是一樣的,程式裡可以隨便放,因為C#裡面就TM這一個封裝好的彈出對話方塊提示訊息函式,可以直接用的。 結果實習做程式測試被坑爹了,發現我錯了,C#這個MessageBox預設是模態對話方塊,是阻塞的,也就是說你不
python-同步和非同步、阻塞和非阻塞、序列和並行、並行和併發、密集型、執行緒和程序的相關概念
1. 同步和非同步 關注的是訊息的通訊機制,描述的是一種行為方式,是多個任務之間的關係。 ① 同步: 呼叫者主動等待被呼叫方返回結果,在沒有返回結果之前,就一直專職等待。 千萬不要把計算機中“同步”理解成“同時執行”。 ② 非同步:呼叫者傳送請求請求,不會專職等待
執行緒中的阻塞和非阻塞I/O
執行緒中的阻塞和阻塞I/O都提到了阻塞,這兩個有什麼區別呢,想了一下,一般來說,當一個執行緒被阻塞時,控制權交由另一個執行緒。 但是如果是單執行緒程式呢,如果一個執行緒阻塞了,那隻能空等了嗎?所以出現了Twisted,可以讓單執行緒阻塞程式變為非阻塞。還是取決於軟體是怎麼寫的。 所以阻塞
同步和非同步,阻塞和非阻塞
同步方法呼叫一旦開始,呼叫者必須等到方法呼叫返回後,才能繼續後續的行為。 非同步方法呼叫更像一個訊息傳遞,一旦開始,方法呼叫就會立即返回,呼叫者就可以繼續後續的操作。而,非同步方法通常會在另外一個執行
nodeJS阻塞和非阻塞
1、建立一個簡單的文字文件text.txt(我的文件內容是:歡迎來到nodeJS的世界) 2、阻塞 (1)建立一個名為demo2.js的檔案 (2)輸入程式碼: var fs = require("fs"); var data = fs.readFileSync('text.t
socket阻塞和非阻塞的區別【轉】
轉載地址:http://kalogen.iteye.com/blog/670841簡單點說: 阻塞就是幹不完不準回來, 非組賽就是你先幹,我現看看有其他事沒有,完了告訴我一聲 我們拿最常用的send
TCP和UDP阻塞和非阻塞之間的區別
首先socket在預設情況下是阻塞狀態的,這就使得傳送以及接收操作處於阻塞的狀態,即呼叫不會立即返回,而是進入睡眠等待操作完成。下面把討論點分為傳送以及接收。 一.傳送選用send(這裡特指TCP)以及sendto(這裡特指UDP)來描述 首先需要說明的是,不