在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 進程越多越好?
信號
創(chuàng)建目錄權限
示例程序
進程的定義
Hello World進程
創(chuàng)建進程
進程鎖
第四章 項目實例Run
Nohup命令
PID
前言
系統(tǒng)調用sendfile
進程參數
參考書籍
后記
進程狀態(tài)
本書概述
寫時復制(Copy On Write)
Docker簡介
第五章 注意事項
實現Run
孤兒進程概念
共享內存
衍生(Spawn)新進程
PPID
第三章 進程進階
退出碼
簡介
進程文件
Thanks for reading!
項目學習
第一章 進程基礎
僵尸進程
系統(tǒng)調用
POSIX簡介
執(zhí)行(Exec)外部程序
文件描述符
進程名字
進程輸入與輸出
Cgroups
進程間通信
查看PID
死鎖概念
進程越多越好?
Run項目架構
  • 1.
復制(Fork)進程
第二章 Go編程實例
活鎖概念
守護(Daemon)進程
并發(fā)與并行
捕獲SIGKILL
Namespaces簡介

進程越多越好?

進程越多越好?

前面提到多進程的并行可以提高并發(fā)度,那么進程是越多越好?一般遇到這種問題都回答不是,事實上,很多大型項目都不會同時開太多進程。

下面以支持100K并發(fā)量的Nginx服務器為例。

舉個例子: Nginx

Nginx是一個高性能、高并發(fā)的Web服務器,也就是說它可以同時處理超過10萬個HTTP請求,而它建議的啟動的進程數不要超過CPU個數,為什么呢?

我們首先要知道Nginx是Master-worker模型,Master進程只負責管理Worker進程,而Worker進程是負責處理真實的請求。每個Worker進程能夠處理的請求數跟內存有關,因為在Linux上Nginx使用了epoll這種多路復用的IO接口,所以不需要多線程做并行也能實現并發(fā)。

而多進程有一個壞處就是帶來了CPU上下文切換時間,所以一味提高進程個數反而使系統(tǒng)性能下降。當然如果當前進程小于CPU個數,就沒有充分利用多核的資源,所以Nginx建議Worker數應該等于CPU個數。

特殊情況

我們想想進程數應該等于CPU數,但是如果進程有阻塞呢?這時是應該提高進程數增加并行數的。

在Nginx的例子中,如果Nginx主要負責靜態(tài)內容的下載,而服務器內存比較小,大部分文件訪問都需要讀磁盤,這時候進程很容易阻塞,所以建議提高下Worker數目。

綁定CPU

一般情況下除了確保進程數等于CPU數,我們還可以綁定進程與CPU,這就保證了最少的CPU上下文切換。

在Nginx中可以這樣配置。

worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;

這是通過系統(tǒng)調用sched_setaffinity()實現了,感興趣大家可以自行學習這方面的知識。

通過這個例子大家對進程的并發(fā)與并行應該有更深入的理解,接下來了解下進程狀態(tài)的概念。

上一篇:進程文件下一篇:Docker簡介