Linux 程序池實現

2021-07-23 04:48:41 字數 2102 閱讀 9586

程序池在伺服器應用中有很多很多=。=

下面是半同步半非同步程序池的實現**:

#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在堆區申請一塊記憶體,但由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,造成不好管理與浪費的情況。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊...