1. 程式人生 > >半同步半非同步 多程序/多執行緒 區別

半同步半非同步 多程序/多執行緒 區別

在《Linux高效能伺服器程式設計》中,看到的最厲害的方法基本上就是這個半同步半非同步的方法了。

簡直炸天。用到了多程序、多執行緒、epoll I/O複用。好像真的很高效能哦。

那麼其中多程序和多執行緒的的區別是啥?

多程序:

為了避免在父、子程序之間傳遞檔案描述符,我們將接受新連線的操作放到子程序中。

前文的討論,接受新連線的操作有在主程序中的,也有放在工作程序的。

放在主程序接受新連線的話,就在主程序中得到了新的連線fd,需要把這個fd傳給工作程序。

很顯然,對這種模式而言,一個客戶連線上的所有任務始終是由一個子程序來處理的。

這是子程序呼叫epoll_wait等待新的連線的I/O。

多執行緒

執行緒池的通用性要高得多,因為它使用了一個工作佇列完全解除了主執行緒和工作執行緒的耦合關係:主執行緒往工作佇列中插入任務,工作執行緒通過競爭來獲取任務並執行他。不過,如果將該執行緒池應用到實際伺服器程式中,必須要保證所有客戶請求都是無狀態的,因為同一個連線上的不同請求可能會由不同的執行緒處理。