1. 程式人生 > >網路程式設計io總結區分。阻塞,非阻塞,非同步,同步

網路程式設計io總結區分。阻塞,非阻塞,非同步,同步

借鑑提煉自http://blog.csdn.net/historyasamirror/article/details/5778378

在網路程式設計中,肯定會有讀寫io的問題。這時候就會有了五種io模型。取自unix network  programing

五種模型分別是,阻塞,非阻塞,io多路複用(select poll epoll),訊號驅動,非同步。

這五種有時候容易出現混亂。網上部落格寫的也比較晦澀,不過看那本書裡的圖形倒是很有趣很清晰。源自於文末的部落格。

在io處理中有兩個重要步驟,1,提出io需求,等待核心準備好。2,從核心傳送資料回來。從核心拷貝回程序。

這時候兩步,區分出了五種io區別。

1.阻塞,在1,2時都是在等待核心返回,函式就停在那了。用的都是recvfrom系統呼叫。


2.非阻塞,在1,時候立馬返回一個錯誤值,這樣時不時的去迴圈查詢,直到,返回ok,之後再處理2。


3.io多路複用,在1,的時候呼叫了select,poll,epoll等函式,這時候就是交給他們處理了。合理後呼叫recvfrom處理2.這裡呼叫了兩個系統呼叫。


4.訊號驅動,這個用的比較少了。不多說了。

5.非同步,在1,的時候每一步都有一個返回。而到2處理完直接返回。



同步非同步,同步是指程序阻塞直到io操作完成,而非同步是立馬完成,這兒的io操作是recvfrom系統呼叫。

阻塞非阻塞關鍵看呼叫者也就是左邊是否立馬得到結果。同步非同步考慮的是雙方的關係。阻塞非阻塞是我這個請求者的狀態。而同步非同步是雙方的溝通方式。

比如買書,阻塞非阻塞,阻塞是一定要等到最後好的結果。非阻塞是立馬得到結果無論好壞。而同步非同步則是兩邊的溝通方式,一直在這等著結果,還是有結果後打電話通知?


這篇部落格還有一段例子很不錯。分別總結了1,2,3,5四種例子。生動形象。

最後,再舉幾個不是很恰當的例子來說明這四個IO Model:
有A,B,C,D四個人在釣魚:
A用的是最老式的魚竿,所以呢,得一直守著,等到魚上鉤了再拉桿;
B的魚竿有個功能,能夠顯示是否有魚上鉤,所以呢,B就和旁邊的MM聊天,隔會再看看有沒有魚上鉤,有的話就迅速拉桿;
C用的魚竿和B差不多,但他想了一個好辦法,就是同時放好幾根魚竿,然後守在旁邊,一旦有顯示說魚上鉤了,它就將對應的魚竿拉起來;


D是個有錢人,乾脆僱了一個人幫他釣魚,一旦那個人把魚釣上來了,就給D發個簡訊。

相關推薦

網路程式設計io總結區分阻塞阻塞非同步同步

借鑑提煉自http://blog.csdn.net/historyasamirror/article/details/5778378 在網路程式設計中,肯定會有讀寫io的問題。這時候就會有了五種io模型。取自unix network  programing 五種模型分別是,

Java基礎:java網路程式設計IO總結(BIO、NIO、AIO)

1.基本概念 在Java網路通訊中,最基本的概念就是Socket程式設計了。Socket又稱“套接字” 向網路發出請求或者應答網路請求。 Socket 和ServerSocket類庫位於 Java.net 包中。ServerSocket用於伺服器端,Socket是建立網路連線時使用的

嵌入式Linux網路程式設計I/O多路複用阻塞I/O模式阻塞I/O模式fcntl()/ioctl()多路複用I/O select()/pselect()/poll()訊號驅動I/O

文章目錄 1,I/O模型 2,阻塞I/O 模式 2.1,讀阻塞(以read函式為例) 2.2,寫阻塞 3,非阻塞模式I/O 3.1,非阻塞模式的實現(fcntl()函式、ioctl() 函式)

網路程式設計Socket的阻塞阻塞IO

網路應用程式一個很重要的工作是傳輸資料。傳輸資料的過程不一樣取決於使用哪種“交通工具“,但是傳輸的方式都是一樣的:都是以位元組碼傳輸。JAVA開發網路程式傳輸資料的過程和方式是被抽象了的,我們不需要關注底層介面,只需要使用Java API 或其他網路框架就能達到資料傳輸的目

網路IO阻塞阻塞同步非同步總結

1、前言   在網路程式設計中,阻塞、非阻塞、同步、非同步經常被提到。unix網路程式設計第一卷第六章專門討論五種不同的IO模型,Stevens講的非常詳細,我記得去年看第一遍時候,似懂非懂,沒有深入理解。網上有詳細的分析:http://blog.csdn.net/historyasamirror/arti

阻塞阻塞同步、異步總結

非阻塞 阻塞 同步 異步 總結 阻塞、非阻塞 主要作用在調用方或請求方,如果調用方或請求方是一直等著不幹其它任何事情,就是阻塞方式,如果調用方或請求方在請求之後一邊等待一邊去做其它事情,這種方式則為非阻塞方式。 同步、異步 同步、異步是調用或請求機制,主要看被調用方或被請求方對結果的處理,

C/C++網路程式設計在windows和linux中將socket設定為阻塞阻塞

C/C++網路程式設計在windows和linux中將socket設定為阻塞和非阻塞              在 socket程式設計中,對於socket的讀寫預設都是阻塞的,但有的情況我們需要將其設定為非阻塞,比如做多

IO中的阻塞阻塞同步非同步及三種IO模型

什麼是同步和非同步?        燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麼發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科技的發展,現在市面上的水壺都有了提醒功能,當我們把水壺插電

IO中的阻塞阻塞同步和異步及三種IO模型

狀態 阻塞io 舉例 最大的 data- str 被調用 當我 返回 什麽是同步和異步? 燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麽發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科

執行緒程序協程非同步同步阻塞IO

1.執行緒,程序,協程 程序定義:程序是具有一定獨立功能的程式在一個數據集上的一次動態執行的過程,是系統進行資源分配和排程的一個獨立單位 執行緒定義:執行緒是CPU排程和分派的基本單位,是比程序更小能獨立執行的單位,執行緒佔有系統。但是它可以與它同屬的程序和其他在該程序中的執行緒共享

Linux下阻塞阻塞同步非同步的關係及IO模型

一、阻塞與非阻塞,同步與非同步的關係 1、同步   同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是說事情必須一件一件地做,等前一件做完了才能做下一件事。 2、非同步   非同步,就是在發出一個功能呼叫時,呼叫者不會立刻得到結果。實際處理這個呼叫的部

API網路程式設計學習總結2

TCP協議 //客戶端 package web.nn; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;

網路程式設計學習總結1

  計算機網路   是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網絡作業系統,網路管理軟體及網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統。 網路程式設計   就是用來實現網路互連的不同計算機上執行的

腦殘式網路程式設計入門(五):每天都在用的Ping命令它到底是什麼?

本文引用了公眾號純潔的微笑作者奎哥的技術文章,感謝原作者的分享。 1、前言 老於網路程式設計熟手來說,在測試和部署網路通訊應用(比如IM聊天、實時音視訊等)時,如果發現網路連線超時,第一時間想到的就是使用Ping命令Ping一下伺服器看看通不通。甚至在有些情況下通過圖

[python]socket傳送http請求阻塞io的一個例子

#通過非阻塞io實現http請求 import socket from urllib.parse import urlparse #使用非阻塞io完成http請求 def get_url(url): #通過socket請求html url

網路程式設計-----IO

IO模型介紹 阻塞IO 非阻塞 多路複用 非同步 IO模型比較分析 selectors 阻塞IO:之前寫的所有的socket,recv,accput都是 阻塞原理: 其實多數時間多用到了等待資料那裡. 非阻塞IO:當你需要資料時,你給系統要系統知道沒有資料,但他會

計算機網路程式設計知識總結

閱讀目錄   計算機網路學習的核心內容就是網路協議的學習。網路協議是為計算機網路中進行資料交換而建立的規則、標準或者說是約定的集合。因為不同使用者的資料終端可能採取的字符集是不同的,兩者需要進行通訊,必須要在一定的標準上進行。一個很形象地比喻就是我們的語言,

網路程式設計總結(基礎入門)

網路程式設計 對於學習網路程式設計,首先要先了解其主要概述: 計算機網路是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統,網路管理軟體及網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統 然後就是要知道它的網路通訊三要素

網路程式設計Demo, 下載檔案

將以前一篇Demo調整下格式, 另外此程式碼不完善, 僅做網路通訊API測試Demo, 客戶端接收資料有BUG,可能因為傳送端傳送太快, 以及接收端接收位元組數量不對引起。 另外發現同一機器做測試Socket通訊資料為記憶體拷貝, 會導致原發送的檔案大小有變化,變化數量跟實際傳送的資料大

網路程式設計阻塞阻塞同步非同步、I/O模型的理解

1. 概念理解      在進行網路程式設計時,我們常常見到同步(Sync)/非同步(Async),阻塞(Block)/非阻塞(Unblock)四種呼叫方式:同步:所謂同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。 例如