Linux中poll實現高效能伺服器及優缺點總結

2021-08-02 12:13:50 字數 1524 閱讀 3077

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pollfd_size 1024

void pd_action(int index);

struct pollfd pd[pollfd_size];

static

void usage(char* proc)

int startup(char* ip,int port)

int opt =1;

setsockopt(sock,sol_socket,so_reuseaddr,&opt,sizeof(opt));

struct sockaddr_in server_addr;

server_addr.sin_family=af_inet;

server_addr.sin_port=htons(port);

server_addr.sin_addr.s_addr=inet_addr(ip);

if(bind(sock,(struct sockaddr*)&server_addr,sizeof(server_addr))<0)

if(listen(sock,10)<0)

return sock;

}int main(int argc,char* argv)

int listen_sock=startup(argv[1],atoi(argv[2]));

pd[0].fd=listen_sock;

pd[0].events=pollin;

int i=1;

for(;i1;

}int _timeout=100000;

int repd=-1;

while(1)

printf("new client connected!\n");

fflush(stdout);

int k=1;

for(;kif(pd[k].fd==-1)

else

if(k==pollfd_size)}}

else

if(pd[j].fd!=0)

}break;}}

}return0;}

void pd_action(int index)

else

if(s<=0)

}else

if(pd[index].revents & pollout)

}

因為伺服器返回值是乙個html的字串所以這個伺服器也可以用瀏覽器直接開啟。

poll伺服器的優點:

高效;檔案描述符的個數沒有上限,解決了select控制代碼有限的問題

缺點:

包含大量檔案描述符的陣列被整體複製於使用者態和核心的位址空間之間,而不論這些檔案描述符是否就緒,它的開銷隨著檔案描述符數量的增加而線性增大。

歡迎指正;

在C 中實現高效能計時2

原帖及討論 簡介精確的時間計量方法在某些應用程式中是非常重要的。常用的 windows api 方法 gettickcount 返回系統啟動後經過的毫秒數。另一方面,gettickcount 函式僅有 1ms 的分辨精度,很不精確。故而,我們要另外尋找一種方法來精確測量時間。win32 api 使用...

Kafka如何實現高效能IO?

雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...

Kafka如何實現高效能IO?

雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...