linux的事件機制:
eventfd(用於程序/執行緒間通訊,效率比pipe高)
epoll,select,epoll
epoll 介面:
int epoll_create(int size); 獲取核心事件表的特殊檔案描述符
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
引數含義:
1. epfd: 要操作的核心事件表的檔案描述符,即 epoll_create 的返回值
2. op:指定操作型別,操作型別有三種:
-> epoll_ctl_add:往核心事件表中註冊指定fd 相關的事件
-> epoll_ctl_mod:修改指定 fd 上的註冊事件
-> epoll_ctl_del:刪除指定 fd 的註冊事件
3. fd:所要操作的檔案描述符,也就是要核心事件表中監聽的 fd
4. event:指定所要監聽的事件型別,epoll_event 結構指標型別。
int epoll_wait(int epfd, struct epoll_event* events, int maxevents, int timeout);
返回值成功時返回就緒的檔案描述符的個數
程序間通訊:
管道,訊號量,訊息佇列,訊號,共享記憶體,unix域套接字(以及傳送描述符)
執行緒間同步:(讀寫鎖,互斥鎖,條件變數,訊號量)
區別:互斥鎖使用者保護資源,條件變數用於等待通知,訊號量可用於一次性多個訪問
生產者消費者模型:(乙個生產者,多個消費者)
1.只用互斥的話,在沒有產品時,消費者需要輪詢,耗費cpu
2.互斥加上條件變數,就可以避免
消費者在沒有產品時用下面函式休眠:
int pthread_cond_wait( pthread_cond_t *cptr, pthread_mutex_t *mptr);
生產者:(下面函式用來喚醒等待的消費者執行緒)
int pthread_cond_signal( pthread_cond_t *cptr)
int pthread_cond_broadcast(pthread_cond_t *cptr)喚醒所有執行緒
訊號量模型:(視窗服務系統)
int sem_init(sem_t *sem, int pshared, unsigned int value);
sem是要初始化的訊號量,pshared表示此訊號量是在程序間共享還是執行緒間共享,value是訊號量的初始值。
int sem_wait(sem_t *sem);等待訊號量,如果訊號量的值大於0,將訊號量的值減1,立即返回。如果訊號量的值為0,則執行緒阻塞
int sem_post(sem_t *sem); 釋放訊號量,讓訊號量的值加1。相當於v操作。
例子:sem_init(&sem, 0, 2); 初始化訊號量,初始值為2,表示有兩個顧客可以同時接收服務
void * get_service(void *thread_id)
}ngix的效能提公升:
多路io,記憶體池,執行緒池
Linux網路程式設計
linux網路程式設計 當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 1.和伺服器的步驟一樣。2.通過設定套介面位址結構,我們說明,客戶端要與之通訊的伺服器的ip位址和 埠。...
linux 網路程式設計
當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 現在讓我們來看看網路程式客戶端的程式設計步驟 以上的步驟,是比較普遍的,我們可以從中看出,編寫網路程式是很有意思的,同 時,也不...
linux 網路程式設計
套接字程式設計 struct sockaddr unsigned short sa family 位址協議,ipv4 tcp ip af inet,ipv6 af inet6 char sa data 14 14位元組的位址協議 struct sockaddr in unsigned short s...