程序池在伺服器應用中有很多很多=。=
下面是半同步半非同步程序池的實現**:
#ifndef _processpool_h
#define _processpool_h
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeclass process
public:
pid_t m_pid;
int m_pipefd[2];
};templateclasse processpool
return m_instance;
} ~processpool()
private:
void setup_sig_pipe();
void run_parent();
void run_child();
private:
//允許最大的子進村數量
static const int max_process_number = 16;
//子緊湊最多能處理的客戶數量
static const int user_per_process = 65536;
//epoll最多處理的事件數
static const int max_event_numebr = 1000;
//程序池程序總數
int m_process_number;
//子程序在池中的序號,0開始
int m_idx;
//每個緊湊都有乙個epool核心事件表,用m_epollfd標識
int m_epollfd;
//監聽socket
int m_listenfd;
//子程序通過m_stop來決定是否停止執行
int m_stop;
//儲存所有子程序的描述資訊
process* m_sub_process;
//程序池例項
static process* m_instance;
};template processpool* processpool::m_instance = null;
static int sig_pipefd[2];
static int setnonblocking(int fd)
statit void addfd(int epollfd,int fd)
stacit void removefd(int epollfd,int fd)
stacit void sig_handler(int sig)
static void addsig(int sig,void(handler)(int),bool restart = true)
sigfillset(&sa.sa_mask);
assert(sigaction(sig,&sa,null)!= -1);
}templateprocesspool::processpool(int listenfd,int process_number)
:m_listenfd(listenfd),m_process_numebr(process_number),m_ide(-1),m_stop(false)
else
} }templatevoid processpool::setup_sig_pipe()
templatevoid processpool::run_child()
for(int i = 0;i0)
break;
}case sigterm:
case sigint:
default:}}
}}
else if(events[i].events&epollin)
else
}} delete users;
users = null;
close(pipefd);
close(m_epollfd);
}templatevoid processpool::run_parent()
for(int i = 0;i0)
{for(int i = 0;i
程序池實現
本文是基於半同步 半非同步程序池的實現,半同步 半非同步模型主要是主程序監視listen套接字,然後發訊號給子程序,子程序完成鏈結和讀寫資料。1.使用epoll實現i 0復用 2.實現訊號和i o事件的統一事件源。3.使用管道進行子程序和父程序的通訊。如下 ifndef processpool h ...
如何實現程序池
有位站友問,如何在linux下實現程序池技術,原貼見 之前雖對程序池這個名詞早有耳聞,但一直沒有真正接觸過。乍一聽好像有點複雜,但稍微一想卻也簡單,下面我就按自己的想法來實現乙個簡單的模型。跟最簡單的資源管理一樣,程序池技術的應該致少由以下兩部分組成 資源程序 預先建立好的空閒程序,管理程序會把工作...
記憶體池 程序池 執行緒池介紹及執行緒池C 實現
平常我們使用new malloc在堆區申請一塊記憶體,但由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,造成不好管理與浪費的情況。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊...