在《linux高效能伺服器程式設計》中,看到的最厲害的方法基本上就是這個半同步半非同步的方法了。
簡直炸天。用到了多程序、多執行緒、epoll i/o復用。好像真的很高效能哦。
那麼其中多程序和多執行緒的的區別是啥?
為了避免在父、子程序之間傳遞檔案描述符,我們將接受新連線的操作放到子程序中。前文的討論,接受新連線的操作有在主程序中的,也有放在工作程序的。
放在主程序接受新連線的話,就在主程序中得到了新的連線fd,需要把這個fd傳給工作程序。
很顯然,對這種模式而言,乙個客戶連線上的所有任務始終是由乙個子程序來處理的。這是子程序呼叫epoll_wait等待新的連線的i/o。
執行緒池的通用性要高得多,因為它使用了乙個工作佇列完全解除了主線程和工作執行緒的耦合關係:主線程往工作佇列中插入任務,工作執行緒通過競爭來獲取任務並執行他。不過,如果將該執行緒池應用到實際伺服器程式中,必須要保證所有客戶請求都是無狀態的,因為同乙個連線上的不同請求可能會由不同的執行緒處理。
半同步半非同步模式
在io模型中 同步和非同步的區分在於核心向應用程式通知的是和種io事件,同步模式下通知的是就緒事件,非同步通知的是完成事件,以及到底是誰來完成i o讀寫,同步模式下由應用程式來i o讀寫完成,而非同步模式下由核心幫我們完成i o讀寫。在併發模型中 同步指的是程式完全按照 的順序執行 非同步指的是程式...
併發 並行 非同步 同步 單程序 多程序 多執行緒區別
單程序 乙個時間段只能執行乙個程序,例如,要看電影就寫不了文件 多程序 乙個時間段能同時執行多個程序,例如,終於能同時看電影寫文件了 多執行緒 讓乙個程序能同時執行一段 的技術,用起來感覺類似於多程序,但區別在於執行緒與執行緒間共享資源,所以比多程序節省了系統資源,例如,乙個瀏覽器可以同時開啟兩個網...
c 11 實現半同步半非同步執行緒池
隨著深入學習,現代c 給我帶來越來越多的驚喜 c 真的變強大了。事實上非常好理解。分為三層 同步層 通過io復用或者其它多執行緒多程序等不斷的將待處理事件加入到佇列中。這個過程是同步進行的。佇列層 全部待處理事件都會放到這裡。補充下思路 主要是後兩層 佇列層 c 11 通過std function能...