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 從儲存空間的角度講,因為插入型別資料的長度固定,有時候需要用空格進行佔位,所以儲存資料時占...