14 15 高併發伺服器中epoll程式設計

2021-07-27 07:52:33 字數 2013 閱讀 8691

1.通過epoll實現高併發伺服器模型

lt(level triggered)是預設的工作方式,並且同時支援block和no-block socket.在這種做法中,核心告訴你乙個檔案描述符是否就緒了,然後你可以對這個就緒的fd進行io操作。如果你不作任何操作,核心還是會繼續通知你的,所以,這種模式程式設計出錯誤可能性要小一點。傳統的select/poll都是這種模型的代表.

et (edge-triggered)是高速工作方式,只支援no-block socket。如果一直不對這個fd作io操作(從而導致它再次變成未就緒),核心不會傳送更多的通知(only once)

#include "socket_includes.h"

#include #include #include #include int mz_ipv4_tcp_create_socket(void)

if((ret = setsockopt(listenfd, sol_socket, so_reuseaddr, &opt, sizeof(opt))) < 0)

bzero(&server, sizeof(server));

server.sin_family = af_inet;

server.sin_port = htons(serv_port);

server.sin_addr.s_addr = htonl(inaddr_any);

len = sizeof(struct sockaddr);

if(bind(listenfd, (struct sockaddr *)&server, len)<0)

listen(listenfd, max_listen_que);

return listenfd;

}int mz_process_data(int sockfd)

perror("recv err:");

return -1;

} if(bytes == 0)

if(bytes == 5)else

s += bytes;

len += bytes;

printf("bytes:%d\n", bytes);

//sleep(2);

} printf("buf:%s\n", buf);

send(sockfd, buf, len, 0);

return 0;

}int main(int argc, char *argv)

listenfd = mz_ipv4_tcp_create_socket();

fcntl(listenfd, f_setfl, o_nonblock);

ev.data.fd = listenfd;

ev.events = epollin;

rv = epoll_ctl(epollfd, epoll_ctl_add, listenfd, &ev);

if(rv < 0)

while(1)

for(i = 0; i < fds; i++)

ev.data.fd = sockfd;

ev.events = epollin | epollet;

epoll_ctl(epollfd, epoll_ctl_add, sockfd, &ev);

continue;

}else

}} }

}

2.併發程式設計方法比較:

a.ache模型,process per connection,簡稱ppc;tpc,thread per connection模型

各做各的事情

b.select / poll 模型之select

能做的事情有限,fd_setsize/1024,也可以修改

效率問題,線性掃瞄的方法,嚴重影響;

核心,使用者空間記憶體拷貝

poll除了低一點,其他基本一致

c.epoll:select反過來就是epoll的好處了

效率問題:epoll只關注活躍的連線

記憶體拷貝:共享記憶體

web伺服器 併發web伺服器實現 epoll

在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。epoll 是當今 linux 系統採用的方式,一般伺服器都是用 epoll 來實現的。epoll 是一種方案,這種方案不使用多程序多執行緒多協程,而是使用單程序單...

Epoll實現伺服器高併發

最近在做乙個關於高併發伺服器相關的專案需要用到非同步 非阻塞io通訊,實現高tcp併發。以下用epoll技術實現乙個簡單的tcp高併發伺服器,驗證無業務處理的情況下,epoll處理併發連線的數的效果。include include include include include include in...

高併發計算伺服器數量

每秒查詢率qps 對乙個特定的查詢伺服器在規定時間內所處理流量多少的衡量標準,即每秒請求數,即最大談吐能力。併發數 併發數和qps是不同的概念,一般說qps會說多少併發使用者下qps,當qps相同時,併發使用者數越大,併發處理能力越好。當併發使用者數過大時,會造成程序 執行緒 頻繁切換,反正真正用於...