在linux 下,nginx預設是採用多程序模型的,其中乙個是父程序,其他都是子程序,父程序主要做一些全域性初始化、排程等工作,而真正的處理時在子程序中完成的,那麼當乙個請求過來的時候,到底有那個程序去服務呢?
我看了**,還是沒有找到答案,後來在網上發現了這篇文章<這裡對相關的問題進行總結:
一 子程序可以繼承父程序的socket的,所以如果在父程序中啟動了監聽的socket後,在子程序中直接進行accept, 這個就是nginx使用的方法。
二 nginx其實不是很好的排程演算法,它只是對於負擔比較重的程序,不給他們分配任務,所以在任務不是很多的時候,這個演算法並不是很好。
下面自己寫了乙個簡單的程式,父程序啟動監聽程序,子程序程序accept,利用共享記憶體,實現程序之間的通訊,使他們輪流執行任務。
[cpp]view plain
copy
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define key 1234
#define size 1024
#define port 9999
#define maxfds 5000
#define eventsize 100
void
process();
intfd, cfd,opt=1;
intshmid;
char
*shmaddr;
struct
shmid_ds buf;
intnum = 0 ;
intmain(
intargc,
char
*argv)
shmaddr = (char
*)shmat(shmid,null,0);
if(shmaddr == (
void
*)-1)
strcpy(shmaddr,"1/n"
);
struct
sockaddr_in sin, cin;
socklen_t sin_len = sizeof
(struct
sockaddr_in);
if((fd = socket(af_inet, sock_stream, 0)) <= 0)
memset(&sin, 0, sizeof
(struct
sockaddr_in));
sin.sin_family = af_inet;
sin.sin_port = htons((short
)(port));
sin.sin_addr.s_addr = inaddr_any;
if(bind(fd, (
struct
sockaddr *)&sin,
sizeof
(sin)) != 0)
if(listen(fd, 32) != 0)
inti ;
for(i = 0; i < 2; i++)
}
while
(1) ;
return
0;
} void
process()
if(shmaddr[0]==
'0')
num = 0 ;
else
num = 1;
if((pid-num)%2==0)
} shmdt(shmaddr);
} }
我們啟動服務,在客戶端輸入
可以看到在伺服器端,兩個程序交替處理請求
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
my pid is 5708
my pid is 5707
nginx 子程序排程
在linux 下,nginx預設是採用多程序模型的,其中乙個是父程序,其他都是子程序,父程序主要做一些全域性初始化 排程等工作,而真正的處理時在子程序中完成的,那麼當乙個請求過來的時候,到底有那個程序去服務呢?我看了 還是沒有找到答案,後來在網上發現了這篇文章 這裡對相關的問題進行總結 一 子程序可...
程序排程演算法(程序排程策略)
程序排程演算法 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短...
程序排程三 程序排程介紹
一 程序排程介紹 1 程序排程的產生 程序從使用資源方面可以分為如下兩類,不管是i o還是cpu受限類的程序,cpu都希望再盡可能短的時間 完成更多的工作,但另一方面,又希望盡可能的減少資源 i o或cpu 的消耗,這兩則之間存在矛盾,所以程序 的排程管理就是來協調兩者之間的衝突。型別別稱 描述示例...