網路通訊IO

2021-10-08 22:01:35 字數 2465 閱讀 6592

阻塞io

只要核心沒有將資料準備好,系統的呼叫就會一直等待,所有的套接字,都是阻塞方式。

非阻塞式io

如果核心還未將資料準備好, 系統調⽤用仍然會直接返回, 並且返回ewouldblock錯誤碼.

非阻塞io往往需要程式設計師迴圈的方式反覆嘗試讀寫⽂檔案描述符, 這個過程稱為輪詢. 這對cpu來說是較⼤大的浪

費, ⼀一般只有特定場景下才使⽤用.

訊號驅動io

利用sigio訊號通知程式進行io操作,系統呼叫sigactio,若是核心沒有準備好,則直接返回繼續等待,直至核心

遞交sigio訊號準備就緒,系統開始讀取。

io多路轉接

利用select控制多個檔案描述符,讀取核心資訊。

非同步io

由核心在資料拷⻉貝完成時, 通知應⽤用程式(⽽而訊號驅動是告訴應⽤戶序何時可以開始拷⻉貝資料).

任何io過程中, 都包含兩個步驟. 第一是等待, 第二是拷貝. 而且在實際的應用場景中, 等待消耗的時間往往都遠遠高於拷貝的時間. 讓io更高效, 最核心的辦法就是讓等待的時間盡量少.

fcntl

int fcntl(int fd, int cmd, … /* arg */ );

重定向dup、dup2

int

dup(

int oldfd)

;int

dup2

(int oldfd,

int newfd)

;

兩個均為複製乙個現存的檔案的描述

兩個函式的返回:若成功為新的檔案描述,若出錯為-1;

由dup返回的新檔案描述符一定是當前可用檔案描述中的最小數值。用dup2則可以用fd2引數指定新的描述符數值。如果fd2已經開啟,則先關閉。若fd1=fd2,則dup2返回fd2,而不關閉它。通常使用這兩個系統呼叫來重定向乙個開啟的檔案描述符。

利⽤用了dup分配⽂檔案描述符是從最⼩小的開始分配這樣的機制, 來完成這個重定向. 相

⽐比之下, 是⽤用dup2更加優雅⼀一些.(通常用dup2)

int

select

(int nfds, fd_set *readfds, fd_set *writefds,

fd_set *exceptfds,

struct timeval *timeout)

;

用途

引數關於fd_set描述

fd_set這個結構就是⼀乙個整數陣列, 更嚴格的說, 是⼀乙個 「位圖」. 使⽤用位圖中對應的位來表⽰示要監視的⽂檔案描述符。

void

fd_clr

(int fd, fd_set *set)

;// ⽤用來清除描述片語set中相關fd 的位

intfd_isset

(int fd, fd_set *set)

;// ⽤用來測試描述片語set中相關fd 的位是否為真

void

fd_set

(int fd, fd_set *set)

;// ⽤用來設定描述片語set中相關fd的位

void

fd_zero

(fd_set *set)

;// ⽤用來清除描述片語set的全部位

函式返回值

socket就緒條件

讀就緒socket上收到帶外資料. 關於帶外資料, 和tcp緊急模式相關(回憶tcp協議頭中, 有⼀乙個緊急指標的字段),

select特點

select 缺點是為處理⼤大批量控制代碼⽽而作了改進的poll,它⼏幾乎具備了之前所說的⼀一切優點,被公認為linux2.6下效能最好的多路i/o就緒通知⽅方法。

epoll的使⽤用過程就是三部曲

調⽤用epoll_create建立⼀乙個epoll控制代碼;

調⽤用epoll_ctl, 將要監控的⽂檔案描述符進⾏行註冊;

調⽤用epoll_wait, 等待⽂檔案描述符就緒;

epoll的優點

select ,poll ,epoll區別

驚群問題

網路通訊 RPC框架在網路通訊上的網路IO模型

首先,應用程序發起 io 系統呼叫後,應用程序被阻塞,轉到核心空間處理。之後,核心開始等待資料,等待到資料之後,再將核心中的資料拷貝到使用者記憶體中,整個 io 處理完畢後返回程序。最後應用的程序解除阻塞狀態,執行業務邏輯。系統核心處理 io 操作分為兩個階段 等待資料和拷貝資料。而在這兩個階段中,...

C 網路通訊

c 網路通訊 一 伺服器端程式 10.17 1.建立伺服器端socket 1 使用socket類 建立伺服器socket物件 socket objs new socket 引數 使用ipendpoint類設定伺服器ip位址和埠號 或使用dns類 ipaddress serip ipaddress.p...

Winsock網路通訊

winsock網路通訊 這裡我希望和大家 一下winsock網上通訊的程式,由於網際網路的普及,越來越多的程式具有了在網上與其他程式通訊的功能.其實所有這些功能都建立在winsock介面之上,應用程式執行大多數網路通訊的基本物件稱為套介面或軟插口 socket 使用mfc winsocket類新增網...