如何實現程序池

2021-06-05 18:09:07 字數 2116 閱讀 8675

有位站友問,如何在linux下實現程序池技術,原貼見:

之前雖對程序池這個名詞早有耳聞,但一直沒有真正接觸過。乍一聽好像有點複雜,但稍微一想卻也簡單,下面我就按自己的想法來實現乙個簡單的模型。

跟最簡單的資源管理一樣,程序池技術的應該致少由以下兩部分組成

資源程序

預先建立好的空閒程序,管理程序會把工作分發到空閒程序來處理。

管理程序

管理程序負責建立資源程序,把工作交給空閒資源程序處理,**已經處理完工作的資源程序。

上面資源程序跟管理程序的概念很好理解,下面就是程序池的關鍵,管理程序如何有效的管理資源程序,如何分配任務給資源程序,如何**空閒資源程序。其實稍加分析一下也很簡單,管理程序要有效的管理資源程序,那麼管理程序跟資源程序間必然需要互動,如何互動呢?linux下兩個程序如何互動?ipc唄,訊號,訊號量,訊息佇列,管道,隨便選乙個合適的就可以了。

下面我就用訊號加訊息佇列來完成上面帖子裡的程序池需求。

[cpp:showcolumns]view plain

copy

print?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

//主接收網路訊息程序

int main()  

}  ...  

}  //

int submitwork(void *pbuffer, int imsglen)  

int initprocesspoll(const

int iprocessnum)  

return 0;  

}  typedef

struct

t_processstatus;  

//指向資源程序管理結構

t_processstatus *pprocessmng = null;  

//記錄有總共有多少個資源程序

int32 imaxprocessnum = 0;  

//初始管理程序管理結構並建立資源子程序,最後接收外部工作請求並分發到資源進行進行處理

initmngprocess(const

int iprocessnum)  

pprocessmng[i].pid = ipid; //記錄資源程序的程序號

pprocessmng[i].iflag = 0;   //把資源程序置為空閒

}  imaxprocessnum = iprocessnum;  

//建立外部跟管理程序通訊的訊息佇列;

imsgque1 = createmsgque();  

//建立管理程序跟資源程序通訊的訊息佇列;

imsgque2 = createmsgque();  

//安裝資源程序**訊號處理函式

signal(sigusr1, releaseaprocess);     

//開始接收外部傳入的任務

while(1)  

}  //通知乙個空閒資源程序進行處理

int noticeaidleprocess()  

}  return -1;    

}  //**乙個處理完成的資源程序

void releaseaprocess(int ipid)  

}  return;  

}  //資源程序的處理

void resourceprocess()  

}  //處理訊息

void startwork()  

//通知管理程序**資源程序

void noticemngprocessfinishedwork();    

如上,乙個基本的程序池處理模型就建立好了, 當然你不能直接拿到編譯,因為裡面很多都是偽**,另個上面的模型忽略了很多細節處理,很多地方是很不可靠的。

現在你是不是對程序池技術更了解了呢?

程序池實現

本文是基於半同步 半非同步程序池的實現,半同步 半非同步模型主要是主程序監視listen套接字,然後發訊號給子程序,子程序完成鏈結和讀寫資料。1.使用epoll實現i 0復用 2.實現訊號和i o事件的統一事件源。3.使用管道進行子程序和父程序的通訊。如下 ifndef processpool h ...

Linux 程序池實現

程序池在伺服器應用中有很多很多 下面是半同步半非同步程序池的實現 ifndef processpool h define processpool h include include include include include include include include include inc...

記憶體池 程序池 執行緒池介紹及執行緒池C 實現

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