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相同時,併發使用者數越大,併發處理能力越好。當併發使用者數過大時,會造成程序 執行緒 頻繁切換,反正真正用於...