方法1 使用select
方法2 使用epoll
首先linux平台下的socket最大連線數是1024,其實去除一些系統用的文字描述符,就會少於1024了,但是一般的伺服器1000多個連線哪能夠呢?用命令ulimit -n可以查詢最大檔案描述符 也可以改寫 ulimit -n 65536
select是i/o多路轉換技術
伺服器端
#include #include #include #include #include #include #include #include int main()
for(fd = 0; fd < fd_setsize; fd++)
else
else }}
}}
}
客戶機
/* make the necessary includes and set up the variables. */
#include #include #include #include #include #include #include int main()
/* we can now read/write via sockfd. */
memset(snd_buf,0,1024);
sprintf(snd_buf,"my pid is %d",getpid());
len=strlen(snd_buf);
if(len>0)
while(1)
close(sockfd);
exit(0);
}
shell 啟動**
#!/bin/bash
./select &
for (( i=0;i<2200;i++))
do ./client &
done
shell 結束**
#!/bin/bash
killall client
killall select
epoll**
#include #include #include #include #include #include #include #include #include #define m_maxfd 1024
struct epoll_event ev,events[m_maxfd];
int epfd;
int main()
{ int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int result;
char rec_buf[1024];
int nfds,i,sockfd;
server_sockfd = socket(af_inet, sock_stream, 0);
server_address.sin_family = af_inet;
server_address.sin_addr.s_addr = htonl(inaddr_any);
server_address.sin_port = htons(5555);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
epfd=epoll_create(m_maxfd);
ev.data.fd = server_sockfd;
ev.events = epollin | epollet;
epoll_ctl(epfd,epoll_ctl_add,server_sockfd,&ev);
memset(rec_buf,0,1024);
while(1) {
int nread;
nfds = epoll_wait(epfd,events,1024,500);
for(i=0;i
高併發快取實現
private static concurrenthashmap gloddeptfutumap new concurrenthashmap future 介面允許表示已經完成的任務 正在執行過程中的任務或者尚未開始執行的任務。futuretask 類實現了 future,幷包含一些建構函式,允許將...
gevent實現高併發
gevent是python的協程模組,協程可以理解成更輕量化的執行緒。因為效能測試工具的一些限制,就自己萌發了自己寫效能測試工具的念想,當然,寫的比較簡單,比如缺少效能指標的收集,慢慢的優化 出來,這個只是為了拿出來練練手 import gevent import requests import t...
怎麼實現高併發系統
脫離了業務的系統架構都是在紙上談兵,真正在複雜業務場景而且還高併發的時候,那系統架構一定不是那麼簡單的,用個 redis,用 mq 就能搞定?當然不是,真實的系統架構搭配上業務之後,會比這種簡單的所謂 高併發架構 要複雜很多倍。可以分為以下 6 點 將乙個系統拆分為多個子系統,用 dubbo 來搞。...