在宏觀上我但願TinyWeb可以這樣:html
並但願在開發的過程當中可以掌握如下知識:git
TinyWeb 目前的功能是:github
TinyWeb 目前的發展計劃:編程
若是IO事件沒有發生,系統阻塞的等待IO事件發生,那麼CPU就被
浪費了,爲實現高併發,不能讓進程阻塞,CPU等待IO事件.
藉助Linux高效的Epoll機制,
至於爲什麼使用Epoll,而不使用Select或Poll,點這裏看看吧.安全
多進程與多線程各有優缺點,而且大部分是互補的,具體就再也不贅述了,
詳情請戳這裏
我選擇多進程的緣由是:服務器
- 安全性高,一個進程崩潰不會影響別的進程
- 容易調試,不易形成死鎖
- 有較爲成熟的進程間通訊同步機制(共享內存,信號,文件鎖,socketpair....)
在接受客戶端鏈接的時候,如何再去建立一個進程,效率低下.故所以採用進程池的方式:
Master進程爲父進程,主要控制子進程的狀態;可動態配置數量的Slave子進程,用於接受鏈接,
處理Http邏輯.網絡
爲了方便的進行內存管理,我設計了一個內存池,不會產生大量的內存碎片,性能待測試.之後還會
介紹如何實現的,盡請期待.
瞭解了下Nginx,有考慮了使用的複雜度,我決定使用這幾個通訊.同步機制數據結構
- 原子操做
- 信號量
- 消息隊列
- 共享內存
- 信號
想要源代碼的請戳這裏,但願你們多多對代碼風格作出評判,畢竟本身只是個大三的學生.多線程
小夥伴想要了解更多的高性能的網絡編程,推薦一個大神的專欄併發