事件迴圈,io復用,還是理解深刻一點好。
比較libev和pyev,發現python庫只是對libev作了簡單的語法轉換。
到了這個層次,就乙個字:diao!!!
libev的c版:
#include #include############注意編譯命令裡,除了指定輸出檔案,還要指定依賴的庫喲ev_io stdin_watcher;
ev_timer timeout_watcher;
static
void stdin_cb (ev_p_ ev_io *w, int
revents)
static
void timeout_cb(ev_p_ ev_timer *w, int
revents)
int main(void
)
gcc -lev -o test test.cpyev的python版:
import輸出:signal
import
pyev
defsig_cb(watcher, revents):
print("
got sigint")
loop =watcher.loop
#optional - stop all watchers
ifloop.data:
print("
stopping watchers:
".format(loop.data))
while
loop.data:
loop.data.pop().stop()
#unloop all nested loop
print("
stopping the loop:
".format(loop))
loop.stop(pyev.evbreak_all)
deftimer_cb(watcher, revents):
watcher.data += 1
print("
timer.data:
".format(watcher.data))
print("
timer.loop.iteration:
".format(watcher.loop.iteration))
print("
timer.loop.now():
".format(watcher.loop.now()))
if__name__ == "
__main__":
loop =pyev.default_loop()
#initialise and start a repeating timer
timer = loop.timer(0, 2, timer_cb, 0)
timer.start()
#initialise and start a signal watcher
sig =loop.signal(signal.sigint, sig_cb)
sig.start()
loop.data = [timer, sig] #
optional
#now wait for events to arrive
loop.start()
對比網上的epoll的io復用監聽事件的流程圖:
libevent和libev的區別對比
兩個庫都是為非同步io排程而設計,在linux上都是使用epoll機制,在freebsd上則都是kqueue,還有諸如此類的很多相通之處。libev的誕生,是為了修復libevent設計上的一些錯誤決策。例如,全域性變數的使用,讓libevent很難在多執行緒環境中使用。watcher結構體很大,因...
libuv和libev 非同步I O庫的比較
libuv和libev,兩個名字相當相近的 i o library,最近有幸用兩個 library 都寫了一些東西,下面就來說一說我本人對兩者共同與不同點的主觀表述。高效能網路程式設計這個話題已經被討論爛了。非同步,非同步,還是非同步。不管是epoll也好,kqueue也罷,總是免不了非同步這個話題...
GMF 示例Mindmap 練習一
通過示例來做是我們it人士快速學習新技術的一種有效方法,在前一篇gmp 了解gmf引擎功能 graphical modeling framework 介紹了gmf的引擎功能,接下來將通過乙個示例mindmap 原始碼可以從這裡 生成乙個領域模型 生成乙個圖形定義模型和工具定義模型,定義編輯用的圖形元...