對於一些概念的澄清

對於開發人員來講,不少概念老是在使用,面試的時候也會被頻繁的問到。其中有幾個老是被混淆的概念,也是被反覆咀嚼的幾個概念。面試

1.補足同步、異步、阻塞、非阻塞術語服務器

首先,須要說明的是 同步、異步、阻塞、非阻塞 這四個概念是被簡略掉的說法。異步

同步,異步(調用)、阻塞,非阻塞(I/O)這纔是稍微徹底的說法。單純的同步,異步,阻塞,非阻塞說明的是工做的方式。而完成的說法則添加了場景。socket

將同步,異步,阻塞,非阻塞兩個場景進行了區分。函數

2.阻塞、非阻塞的場景tornado

阻塞、非阻塞的場景是在I/O,進行設置的地方就是在處理文件句柄。在Linux服務器代碼中一版都有這樣的設置oop

iret = fcntl(nfd, F_SETFL, O_NONBLOCK)呢,那就是不空等。不進行阻塞,形成CPU空等。spa

這就是阻塞、非阻塞I/O場景。設計

3.同步、異步場景指針

同步、異步調用是一種程序設計的思路。同步是很是顯然的。函數一個接一個的執行。

而異步則是在知足條件下進行調用。其實就是回調。

好比Linux aio,libev等等著名的異步方式的lib。都是要肯定的定義,在各類狀況下的方法。

    //設置cb函數,字段等
    ev_io_init(&socket_watcher, accept_cb, sd, EV_READ);
    ev_io_start(loop, &socket_watcher);
 
    ev_timer_init (&timeout_watcher, timeout_cb, 2, 1);
    ev_timer_start (loop, &timeout_watcher);

而後設置給回調指針。這樣的工做方式則是異步。

4.爲何(異步、非阻塞)概念在混淆

這兩個概念其實有不少人是在一種混淆的狀態。爲何由於在不少network lib中,這兩種狀況同時存在,例如tornado,twisted。而他們的應用場景也沒有進行比較深入的思考。越簡單越難啊。真是老虎,老鼠傻傻分不清。

 

好了不說了,該洗澡睡覺了。。

相關文章
相關標籤/搜索