epoll反應堆模型

2021-10-13 23:03:28 字數 1748 閱讀 5559

參考 <>

參考 <>

求職期間,還是得好好學習。

看了大概的思路,自己理解著敲一下。和原來**的有些地方不同。

#include #include #include #include #include #include #include #include #include #define max_events 1024 /*監聽上限*/

#define buflen 4096 /*快取區大小*/

#define serv_port 6666 /*埠號*/

/*描述就緒檔案描述符的相關資訊*/

struct myevent_s;

int g_efd; //全域性變數,作為紅黑樹根

struct myevent_s g_events[max_events+1]; //自定義結構體型別陣列. +1-->listen fd

void eventinit(struct myevent_s *ev,int fd,void *arg)

void eventadd(int efd,struct myevent_s *ev,int events,void (*callbak)(int fd,int events,void* arg))

struct epoll_event epv;

int op;

ev->events = events;

ev->callbak = callbak;

ev->last_active = time(null);

epv.data.ptr = (void*)ev;

epv.events = events;

op = epoll_ctl_add;

ev->status = 1;

epoll_ctl(efd,op,ev->fd,&epv);

return;

}void eventdel(int efd,struct myevent_s *ev)

void senddata(int fd, int events, void *arg);

void recvdata(int fd, int events, void *arg);

void recvdata(int fd, int events, void *arg)

else if(ev->len == 0)elseelse

}return;

}void senddata(int fd, int events, void *arg)

else if(len == 0)elseelse

}return;

}void acceptconn(int fd,int events,void *arg)

char buf[20];

printf("accpet %s:%d\n",

inet_ntop(af_inet,&client_addr.sin_addr,buf,sizeof(buf)),

ntohs(client_addr.sin_port));

int i;

for(i=0;i= 60)}}

for(i=0;ievents & epollin))

//如果監聽的是寫事件,並返回的是寫事件

else if((events[i].events & epollout) && (ev->events & epollout))}}

}

epoll反應堆模型實現

在高併發tcp請求中,為了實現資源的節省,效率的提公升,epoll逐漸替代了之前的select和poll,它在使用者層上規避了忙輪詢這種效率不高的監聽方式,epoll的時間複雜度為o 1 也就意味著,epoll在高併發場景,隨著檔案描述符的增長,有良好的可擴充套件性。關鍵函式有三個 核心資料結構 t...

epoll反應堆理解

反應堆伺服器 接收客戶端的資訊,然後傳送回去 監聽到事件才做對應的 函式,這是reactor乙個固定的正規化,不能太隨心所欲.當然可以在readdata裡write client fd 但不符合正規化.而且,回想一下epoll的作用 幫助程序監聽檔案描述符 是否可寫或可讀,只有epoll給你監聽到可...

reactor 反應堆模型

1.reactor模型,本質上講管理網路io 使用下面這個結構用來管理我們的io struct ntyreactor 下面這段 比較核心 我們關心的事件與發生的事件發生時,才去呼叫 2.實現 include include include include include include includ...