epoll的一些關鍵點和總結(二)

2021-06-28 04:24:38 字數 1281 閱讀 8593

epoll非同步精髓(et模式):

2個epoll初始化片段:

epoll_event ev;

ev.events = epollin | epollet;

ev.data.fd = fd;

int ret = epoll_ctl(_epfd, epoll_ctl_add, fd, &ev);

_pevents = new epoll_event[epoll_size - 1];

int n = epoll_wait(_epfd, _pevents, epoll_size - 1, epoll_time_out);

epoll_ctl第三個引數為需要監聽的fd,第四個引數告訴核心要監聽的事件,data為使用者攜帶的引數,一般為了方便都會順帶這個監聽的fd,也可用自定義型別。

epoll_wait第二個引數是 n個監聽到的事件的陣列,核心會把這n個發生事件的epoll_ctl中第四個引數的資料拷貝到這裡。

epoll_wait迴圈裡:

if (_pevents[i].events & epollin)

else if (_pevents[i].events & epollout)

onreadepoll中:

epoll_event ev;

ev.data.fd = _pevents[i].data.fd;

//也可用自定義型別mydata

= mydata

ev.events = epollout | epollet;

epoll_ctl(_epfd, epoll_ctl_mod, _pevents[i].data.fd, &ev);

讀到資料,改為監聽是否可寫。

onwriteepoll中:

epoll_event ev;

ev.data.fd = _pevents[i].data.fd;

ev.events = epollin | epollet;

epoll_ctl(_epfd, epoll_ctl_mod, _pevents[i].data.fd, &ev);

寫了資料,改為監聽是否可讀。

以上為同乙個fd中資料收發的關鍵點,如果是跨fd**程式,情況將更複雜,此處暫不贅述

A星演算法的一些關鍵點

基本原理 c internal abstract class astardata class astarwhere t astardata var nextlocation this.end while nextlocation this.start return path 根據尋找的時候的方向,計...

dojo tree控制項使用的一些關鍵點

近期公司專案使用強大的dojo來展示樹形資料,於是乎就學習使用了下。資料格式使用json格式,節點資料是子節點包含乙個屬性 parent 儲存了其父節點的id。資料是儲存在資料庫中的,實現dbtree。有靜態樹和動態樹兩種。靜態樹,初始化時返回全部樹節點,動態樹初始化返回父節點,開啟父節點時再次訪問...

一些知識點總結

mysql資料庫中varchar和char的區別 1 varchar的長度是可變的,char的長度不可變。2 儲存時,char型別的資料要比varchar型別的資料速度更快,因為其長度固定,方便儲存於查詢。3 從儲存空間的角度講,因為插入型別資料的長度固定,有時候需要用空格進行佔位,所以儲存資料時占...