編寫高效服務(wù)器程序,需要考慮的因素

  • 系統(tǒng)的硬件資源,比如說CPU個數(shù),速度,內(nèi)存大小等
  • 一方面是指系統(tǒng)的軟件資源,比如操作系統(tǒng)允許用戶打開的最大文件描述符數(shù)量
  • 并發(fā)處理 進(jìn)程池或線程池實現(xiàn)高效的并發(fā)模式(半同步、半異步、領(lǐng)導(dǎo)者、追隨者模式),以及高效的邏輯處理方式--有限狀態(tài)機(jī)
  • 內(nèi)存的規(guī)劃使用
    使用內(nèi)存池,以空間換時間,被實現(xiàn)創(chuàng)建好,避免動態(tài)分配,減少服務(wù)器對內(nèi)核的訪問頻率
  • 避免不必要的數(shù)據(jù)復(fù)制,減少將數(shù)據(jù)從內(nèi)核緩沖拷貝到應(yīng)用程序緩沖區(qū)中。以ftp服務(wù)器來說,并不需要知道目標(biāo)文件的內(nèi)容,直接使用‘零拷貝’函數(shù)sendfile。當(dāng)兩個工作進(jìn)程之間需要傳遞大量數(shù)據(jù)時,應(yīng)該考慮使用共享內(nèi)存在他們直接共享這些數(shù)據(jù),而不是使用管道或者消息隊列來傳遞。
  • 上下文切換和鎖
  1. 過多的進(jìn)程或縣城之間的切換占用了大量CPU時間,服務(wù)器真正處理業(yè)務(wù)邏輯的CPU時間比重就下降了。因此為每個客戶端創(chuàng)建一個工作線程是不可取的。高效并發(fā)模式
  2. 鎖的引入不僅需要處理業(yè)務(wù)邏輯,而且需要訪問內(nèi)核資源,所以盡量避免使用鎖。一定要使用的話,考慮粒度問題,比如讀寫鎖,當(dāng)工作線程都只讀一塊內(nèi)存區(qū)域時,讀寫鎖不會增加系統(tǒng)開銷,而只有需要寫是才能真正需要鎖住這塊內(nèi)存區(qū)域。
    對于高峰和低峰的伸縮處理
    適度的緩存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容