poll多路復用壓力測試

2021-10-10 07:12:33 字數 2438 閱讀 9865

前面幾篇文章已經實現了shell指令碼執行和客戶端的**,我就不多寫了,直接上poll**。

poll**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define array_size(x) (sizeof(x)/sizeof(x[0]))

//求陣列元素的個數

intsocket_server_init

(char

*listen_ip,

int listen_port)

;int main (

int argc,

char

**ar**)

printf

("%s server start to listen on port %d\n"

,"59.110.42.24"

,serv_port)

;for

(i=0

; i<

array_size

(fds_arry)

; i++

)//遍歷陣列

fds_arry[0]

.fd = listenfd;

//將第乙個陣列賦值為listenfd

fds_arry[0]

.events = pollin;

//定義事件

max =0;

for(;;

)else

if( rv ==0)

if( fds_arry[0]

.revents & pollin )

//判斷指定描述符是否在集合中,相當於select判斷

found =0;

for(i=

0; i<

array_size

(fds_arry)

;i++)}

if(!found)

max = i>max ? i:max;

if( rv <=0)

continue;}

elseif(

(rv=

read

(fds_arry[i]

.fd,buf,

sizeof

(buf)))

<=0)

else}}

}}cleanup:

close

(listenfd)

;return0;

}int

socket_server_init

(char

*listen_ip,

int listen_port)

setsockopt

(listenfd, sol_socket, so_reuseaddr,

&on,

sizeof

(on));

memset

(&servaddr,0,

sizeof

(servaddr));

servaddr.sin_family=af_inet;

servaddr.sin_port =

htons

(listen_port);if

(!listen_ip )

else}if

(bind

(listenfd,

(struct sockaddr *

)&servaddr,

sizeof

(servaddr)

)<0)

if(listen

(listenfd,13)

<0)

cleanup:

if(rv <0)

close

(listenfd)

;else

rv = listenfd;

return rv;

}

poll 比select要好一些,他多了乙個結構體,裡面包含的是

struct polld
在select中是將rset置1來判斷那個收到了資料,poll是通過收到資料,將收到資料的陣列(struct pollfd fds_arry[1024]),那一位給乙個pollin訊號(fds_arry[0].events = pollin),然後下面進行判斷

他比select好在:

1、可以建立很多給描述符,而select只能1024個。

2、他不需要修改fds_arry(就是select的rset,因為select每次要復位為0)

select多路復用壓力測試

1 shell指令碼 bin bash bin bash for i 1 i 1100 i i 1 do.a echo i sleep 0.005 done echo 8 cat test.log grep f wc l cat test.log grep o wc l echo 2 客戶端 inc...

epoll多路復用壓力測試

epoll相對於select poll效能優越相當之多,可以說是二者結合加強版本,我們可以設想一下,假如有100w個tcp連線,那麼每次有資料過來了,select poll都需要去從第乙個到最後乙個進行依次遍歷,而epoll會講佇列排序講發生事件放在前面,後面的就不用遍歷了,所以準確的說處理幾千的連...

I O多路復用 poll

函式結構 int poll struct pollfd fds,nfds t nfds,int timeout 引數 返回值 和select一模一樣 events和revents events 關注事件 讀就緒 寫就緒 異常 輸入的時候起作用 revents 輸出結果,輸出的時候起作用 輸入輸出引數...