qt多线程服务器_常见网络服务器并发模型
點擊藍字 關注我們
近些年,隨著互聯網的大發展,高并發服務器技術也快速進步,從簡單的循環服務器模型處理少量網絡并發請求,演進到解決C10K,C10M問題的高并發服務器模型。本文主要以TCP為例,總結了幾種常見的網絡服務器模型的實現方式,優缺點,以及應用實例。
單線程循環
單線程循環優點:
簡單、易于實現沒有同步、加鎖這些麻煩事,也沒有這些開銷
缺點:
1、阻塞模型,網絡請求串行處理2、沒有利用多核cpu的優勢,網絡請求串行處理
總之,沒有充分利用CPU資源。
適用場景:「測試、演示」
典型應用:thrift TSimpleServer
多線程/多進程
多線程/多進程解析:
主要特點是每個網絡請求由一個進程/線程處理,線程內部使用阻塞式系統調用,在實際場景中使用預先分配的進程池/線程池,以減少頻繁創建銷毀線程的開銷,往往可以得到更好的性能。
在線程的職能劃分上,可以由一個單獨的線程處理accept連接,其余線程處理具體的網絡請求(收包,處理,發包);還可以多個進程單獨listen、accept網絡連接(在linux2.6內核之前會產生驚群,多個進程被喚醒accept建立連接)
優點:
1、實現相對簡單2、利用到CPU多核資源
缺點:
線程內部還是阻塞的,舉個極端的例子,如果一個線程在handle的業務邏輯中sleep了,這個線程也就掛住了。
單線程IO復用
單線程IO復用解析:linux高并發服務器中常用epoll作為IO復用機制,select和poll等其他機制不展開討論,區別和特點可以自行搜索。線程將需要處理的socket讀寫事件都注冊到epoll中,當有網絡IO發生時,epoll_wait返回,線程檢查并處理到來socket上的請求。
優點:
實現簡單減少鎖開銷
減少線程切換開銷
缺點:只能使用單核cpu,handle時間過長會導致整個服務掛死。
適用場景:高IO、低計算,handle處理時間短
典型應用:「redis」
多線程/多進程IO復用
多線程/多進程IO復用解析:每個子進程都監聽服務,并且都使用epoll機制來處理進程的網絡請求,子進程 accept() 后將創建已連接描述符,然后通過已連接描述符來與客戶端通信。
優點:支撐較高并發
缺點:異步編程不直觀、容易出錯
適用場景:支撐高并發
典型應用:「Nginx」
多線程劃分IO角色
多線程劃分IO角色解析:
一個accept thread處理新連接建立一個IO thread pool處理網絡IO
一個handle thread pool處理業務邏輯
優點:
按不同功能劃分線程,各線程處理固定功能,效率更高
可以根據業務特點配置線程數量來性能調優
缺點:
1、線程間通信需要引入鎖開銷2、邏輯較復雜,實現難度大
電銷應用: thrift TThreadedSelectorServer
AIO
AIOlinux AIO機制尚不成熟,沒有廣泛應用,不展開,感興趣同學可以參考:
http://man7.org/linux/man-pages/man7/aio.7.html
協程
協程解析:就是在應用層用戶態模擬線程,在用戶態管理協程的調度與切換。
優點:
1、減少上下文切換開銷2、編程友好,同步的方式寫出異步代碼
缺點:多個協程運行在一個線程上,一個協程阻塞將導致整個線程阻塞
參考:
https://morsmachine.dk/go-scheduler小結:上面介紹了常見的網絡服務器模型,現實中可能存在其他的組合和變形,重要的是理解每種場景中所面臨的問題和每種模型的特點,設計出符合應用場景的方案才是好方案。
-- End --
推薦好文??點擊藍色字體即可跳轉?【收藏】大作業學生信息管理系統也太好看了叭?【收藏】軟件安裝管家?【典藏】看了這十道C語言題,你敢說你精通C語言??【嘮嗑】為什么大公司不開發Linux桌面應用??【干貨】200行到1000行適合編程進階的項目?【干貨】Qt簡易聊天室設計?【干貨】Qt Live2D桌面動態壁紙
公眾號ID:LearnBase
作者:夢凡
夢想在,終不凡~
喜歡本篇內容請給我們點個在看
總結
以上是生活随笔為你收集整理的qt多线程服务器_常见网络服务器并发模型的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: toad dba suite for o
- 下一篇: python将图片存入数据库_使用pyt
