預分配執行緒 prethreading

2021-08-01 12:56:30 字數 1600 閱讀 4580

相關網路程式設計函式:

預分配執行緒(prethreading)是讓伺服器在啟動階段建立乙個執行緒池,每個客戶請求由當前可用執行緒池中的某個閒置執行緒處理

1.初始版本:每個客戶乙個執行緒

int main(int argc,char **argv)

}void *doit(void *arg)

2.每個執行緒各自accept

上乙個版本是來乙個客戶建立乙個執行緒,但是很明顯,預先派生乙個子執行緒池比現場建立執行緒效能更加高效。

預先建立執行緒池程式

typedef structthread;

thread *tptr;

int listenfd,nthreads;

socklen_t addrlen;

pthread_mutex_t mlock=pthread_mutex_initalizer;

int main(int argc,char **argv){

int i;

void sig_int(int),thread_make(int);

if(argc==3)

listenfd=tcp_listen(null,argv[1],&addrlen);

else if(argc==4)

listenfd=tcp_listen(argv[1],argv[2],&addrlen);

else

err_quit("usage:server <#threads>");

nthreads=atoi(argv[argc-1]);

tptr=calloc(nthreads,sizeof(thread));

for(i=0;i

#define maxncli 32

int clifd[maxncli],iget,iput;

pthread_mutex_t clifd_mutex=pthread_mutex_initalizer;

pthread_cond_t clifd_cond=pthread_mutex_initalizer;

static int nthreads;

int main(int argc,char **argv){

int i,listenfd,connfd;

void sig_int(int),thread_make(int);

socklen_t addrlen,clilen;

struct sockaddr *cliaddr;

if(argc==3)

listenfd=tcp_listen(null,argv[1],&addrlen);

else if(argc==4)

listenfd=tcp_listen(argv[1],argv[2],&addrlen);

else

err_quit("usage:server <#threads>");

cliaddr=malloc(addrlen);

nthreads=atoi(argv[argc-1]);

tptr=calloc(nthreads,sizeof(thread));

iget=iput=0;

for(i=0;i

快速預分配磁碟空間

在開發過程中有時候需要為某個檔案快速地分配固定大小的磁碟空間,為什麼要這樣做呢?1 可以讓檔案盡可能的占用連續的磁碟扇區,減少後續寫入和讀取檔案時的磁碟尋道開銷 2 迅速占用磁碟空間,防止使用過程中所需空間不足。為某個檔案預分配磁碟空間必須是實際的占用磁碟空間,以linux來說,使用lseek或tr...

pmfs 實體地址預分配

老闆讓測試pmfs在有預分配和無預分配功能這兩個情況下的效能。pmfs中預分配的函式在file.c檔案中.fallocate 工具 fio 師兄寫的測試檔案 test1 fio常用引數參考 檔案 root pmfs master pmfs 注意 由於pmfs是系統檔案系統,我們先將他編譯成模組,在載...

MySQL Binlog預分配的實現和效能

最近對上提到的binlog預分配進行了實現,基於percoan5.5.18版本 在worklog中號稱在sync binlog 1的情況下有10倍的tps提公升。在沒有group commit的情況下確實有可能。實現思路 與worklog中提到的不同,這裡使用daemon plugin來實現預分配 ...