高併發伺服器學習筆記之四 多執行緒模型

2021-08-20 21:46:54 字數 1687 閱讀 8979

該模型和多程序模型的思想類似,只是把程序換成了執行緒,因為執行緒的建立比程序建立開銷小。但這並不是說多執行緒就一定比多程序優秀,程序和執行緒都有各自的優缺點,具體請自行查閱執行緒和程序相關的內容,完整**戳這裡​​​​​​​

#include #include #include #include #include #include #include #include /* see notes */

#include #include #include /* superset of previous */

#include #include "public_head.h"

#define listen_backlog 50

sem_t sem;

void *thread_func(void *arg)

; char write_buff[256] = ;

while (1)

printf("\n");

close(acceptfd);

return null;

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

; pthread_t tid;

memset(&server_addr, 0, sizeof(server_addr));

memset(&client_addr, 0, sizeof(client_addr));

if((sockfd = socket(af_inet, sock_stream, 0)) < 0)

handle_error("socket");

server_addr.sin_family = af_inet;

server_addr.sin_port = htons(9527);

server_addr.sin_addr.s_addr = htonl(inaddr_any);

if(bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)

;close(sockfd);

strerror_r(errno, buff, sizeof(buff));

handle_error("bind");

}if(listen(sockfd, listen_backlog) < 0)

sem_init(&sem, 0, 0);

while(1)

memset(client_ip, 0, sizeof(client_ip));

inet_ntop(af_inet,&client_addr.sin_addr,client_ip,sizeof(client_ip));

printf("client:%s:%d\n",client_ip,ntohs(client_addr.sin_port));

if(pthread_create(&tid, null, thread_func, &acceptfd) != 0)

//wait thread start

//if(sem == 0) block

//wait for sem != 0

//unblock, sem -= 1

sem_wait(&sem);

}sem_destroy(&sem);

close(sockfd);

return 0;

}

(五十二)高併發伺服器 多執行緒模型

在使用執行緒模型開發伺服器時需考慮以下問題 1.調整程序內最大檔案描述符上限 2.執行緒如有共享資料,考慮執行緒同步 3.服務於客戶端執行緒退出時,退出處理。退出值,分離態 4.系統負載,隨著鏈結客戶端增加,導致其它執行緒不能及時得到cpu 多執行緒的機制一般是使用執行緒池,模型如下 0 以下是出錯...

併發伺服器模型 多執行緒伺服器

coding utf 8 from socket import from threading import thread from time import sleep 處理客戶端的請求並執行事情 def dealwithclient newsocket,destaddr while true rec...

高併發伺服器學習筆記之七 非同步IO poll模型

poll模型和select模型很相似。兩者間的主要區別在於我們要如何指定待檢查的檔案描述符。在select中,我們提供三個集合,在每個集合中標明我們感興趣的檔案描述符。而在poll中我們提供一列檔案描述符,並在每個檔案描述符上標明我們感興趣的事件,完整 戳這裡 用到的系統呼叫如下 include i...