Linux伺服器框架設計思路

2021-10-09 09:19:09 字數 1038 閱讀 5791

多程序(程序池)

主程序偵聽socket,將客戶端socket分配給子程序去處理。這樣程式設計簡單,可能需要用到程序間的通訊,但程序開銷很大,併發量非常小。

多執行緒(執行緒池)

主線程偵聽socket,將客戶端socket分配給每乙個執行緒去處理。這樣程式設計較簡單,但執行緒的建立和切換同樣開銷較大,併發量較小。

無論是程序池還是執行緒池,其作用都是為了減少程序/執行緒頻繁建立和**帶來的效能損失,本質上依然是乙個cpu指向單元在請求的生命週期內,只能服務這乙個請求,就是說這個程序/執行緒被這個請求獨佔。而程序/執行緒的建立和管理需要消耗一定的作業系統資源,當程序/執行緒數量過多時,會導致系統資源耗盡,並且大量執行緒的切換也會有很大的開銷,最終會使得服務不可用。

為了解決上述問題,有兩種思路:第一種,在乙個程序/執行緒中處理多個連線(io多路復用,方式有select、poll、epoll)。第二種,使用比執行緒更細小的執行單元,例如協程。第一種需要使用非同步的方式進行程式設計,第二種則可以使用同步的方式。現在主流的方式是將兩種方法結合起來使用。

當有特別多的閒置連線或長連線時,io多路復用的優勢更為明顯,因為能夠節省更多的系統資源。如果是大量短連線的話,io多路復用和多執行緒效能差距應該不大。

單個epoll+單執行緒

將偵聽socket和連線客戶端的socket都繫結在乙個epoll上,且只有乙個執行緒來應對這個epoll。當連線數比較多、來往資料比較多的時候,可能乙個執行緒會忙不過來。

每個執行緒乙個epoll

網路執行緒組+業務執行緒組

在上面兩種情況下,如果業務邏輯處理過程比較耗時,會導致很久才能處理到下乙個就緒的socket。這種情況下可以將一部分任務拆分出來,交給業務執行緒組去做。然而當網路執行緒組和業務執行緒組的執行緒數和超過cpu執行緒數時,網路執行緒組和業務執行緒組是不能並行執行的,同樣會導致上述問題,這時還不如把任務全都在網路執行緒中做完。

按cpu核心數量開多執行緒,執行緒數量恆定不變,等於epoll數量。在每個執行緒中epoll收到連線後,不要另開執行緒去處理,而是用協程處理。

emmm…如果併發量不是特別大並且機器資源充足,使用多執行緒的方式處理高併發也是可以的,這樣做的優點是開發簡單,易於維護。

說框架設計思路

其旨在打造乙個集應用開發 大資料儲存 處理 分布式計算 自動化部署的無節點微服務集中開發與執行平台,以響應業務的快速變更,滿足系統對大資料,大併發與開發效率的需求 平台設計以資料為核,以groovy指令碼為基礎,通過提供api 非同步訊息處理 排程等基礎構件來支援應用的快速開發 核心是通過整合現有開...

Linux架設時間伺服器

ntpdate 0.centos.pool.ntp.org 在linux下,我們可以通過自帶的ntp network time protocol 協議通過網路使自己的系統保持精確的時間。可用的公共時間伺服器列表可以從下面的位址獲取 ntp是用來使系統和乙個精確的時間源保持時間同步的協議。建議大家在自...

Linux 架設vsftp伺服器

el5上架設 vsftp是在各linux分發版中較為流行的ftp伺服器 基本軟體需求 vsftpd 2.0.5 12.e15.i386.rpm 安裝配置,分為在xinet.d下的服務託管模式 和 獨立模式,此次討論獨立模式 修改配置檔案適合需求 etc vsftpd vsftpd.conf 修改ip...