在進行網路程式設計時[2] ,我們常常見到同步(sync)/非同步(async),阻塞(block)/非阻塞(unblock)四種呼叫方式:
同步:所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。
例如普通b/s模式(同步):提交請求->等待伺服器處理->處理完畢返回這個期間客戶端瀏覽器不能幹任何事
阻塞:阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起(執行緒進入非可執行狀態,在這個狀態下,cpu不會給執行緒分配時間片,即執行緒暫停執行)。函式只有在得到結果之後才會返回。
有人也許會把阻塞呼叫和同步呼叫等同起來,實際上是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在socket中呼叫recv函式,如果緩衝區中沒有資料,這個函式就會一直等待,直到有資料才返回。而此時,當前執行緒還會繼續處理各種各樣的訊息。
物件的阻塞模式和阻塞函式呼叫
物件是否處於阻塞模式和函式是不是阻塞呼叫有很強的相關性,但是並不是一一對應的。阻塞物件上可以有非阻塞的呼叫方式,我們可以通過一定的api去輪詢狀態,在適當的時候呼叫阻塞函式,就可以避免阻塞。而對於非阻塞物件,呼叫特殊的函式也可以進入阻塞呼叫。函式select就是這樣的乙個例子。
1. 同步,就是呼叫乙個功能,該功能沒有結束前,一直等結果。
2. 非同步,就是呼叫乙個功能,不需要知道該功能結果,該功能有結果後通知(**通知)
3. 阻塞,就是呼叫(函式),(函式)沒有接收完資料或者沒有得到結果之前,不會返回。
4. 非阻塞,就是呼叫(函式),(函式)立即返回,通過select通知呼叫者。
同步io和非同步io的區別就在於:資料拷貝的時候程序是否阻塞!
阻塞io和非阻塞io的區別就在於:應用程式的呼叫是否立即返回!
軟體工程 軟體工程概述
一.軟體 定義 計算機系統中的程式及其文件 程式 計算任務的處理物件和處理規則的描述 文件 為了便於了解程式所需的闡明性資料 特點 軟體的種類 按功能劃分 系統軟體 支援軟體 應用軟體 二.軟體工程的起源和概念 早期電腦程式 現在人們認為 在資訊產業中,微電子是基礎,計算機和網路是載體,軟體是核心 ...
軟體工程 軟體工程的概述
軟體工程是研究和應用如何以系統性的 規範化的 可定量的過程化方法去開發和維護軟體,以及如何把經過時間考 驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科,它涉及到程式語言 資料庫 軟體 開發工具 系統平台 標準 設計模式等方面。先從軟體工程的第一章開始說起 軟體工程的概述,這一章是...
軟體工程之軟體工程管理
乙個好的工程需要配套的管理體系,軟體工程也不列外。軟體工程就我的理解就是對軟體工程的各個階段都一定規範,俗話說 不以規矩,不能成方圓 而這個規矩就由管理來充當。乙個軟體工程管理需要軟體專案計畫 成本估算 進度計畫 風險分析和人員的組織形式 或調動 一 在軟體專案計畫中,專案的任務是研究專案的效能 功...