linux處理大批量控制代碼的epoll技術

2021-06-18 14:52:00 字數 1311 閱讀 6521

支援乙個程序開啟大數目的socket描述符

select 最不能忍受的是乙個程序所開啟的fd是有一定限制的,由fd_setsize設定,預設值是1024。對於那些需要支援的上萬連線數目的im伺服器來說顯然太少了。這時候你一是可以選擇修改這個巨集然後重新編譯核心,不過資料也同時指出這樣會帶來網路效率的下降,二是可以選擇多程序的解決方案(傳統的apache方案),不過雖然linux上面建立程序的代價比較小,但仍舊是不可忽視的,加上程序間

資料同步遠比不上執行緒間同步的高效,所以也不是一種完美的方案。不過 epoll則沒有這個限制,它所支援的fd上限是最大可以開啟檔案的數目,這個數字一般遠大於2048,舉個例子,在1gb記憶體的機器上大約是10萬左右,具體數目可以cat /proc/sys/fs/file-max察看,一般來說這個數目和

系統記憶體關係很大。

【 epoll的好處】

來看看epoll的改進之處吧,其實把select的缺點反過來那就是epoll的優點了。

3.1. epoll沒有最大併發連線的限制,上限是最大可以開啟檔案的數目,這個數字一般遠大於2048,一般來說這個數目和系統記憶體關係很大,具體數目可以cat /proc/sys/fs/file-max察看。

3.2. 效率提公升,epoll最大的優點就在於它只管你「活躍」的連線,而跟連線總數無關,因此在實際的網路環境中,epoll的效率就會遠遠高於select和poll。

3.3. 記憶體拷貝,epoll在這點上使用了「共享記憶體」,這個記憶體拷貝也省略了。

【如何使用epoll】

intepoll_create(int size);

intepoll_ctl(int epfd,intop, int fd, structepoll_event *event);

控制某個epoll檔案描述符上的事件:註冊、修改、刪除。其中引數epfd是epoll_create()建立epoll專用的檔案描述符。相對於select模型中的fd_set和fd_clr巨集。

intepoll_wait(int epfd,structepoll_event * events,int maxevents,int timeout);

等待i/o事件的發生;引數說明:

epfd:由epoll_create()生成的epoll專用的檔案描述符;

epoll_event:用於回傳代處理事件的陣列;

maxevents:每次能處理的事件數;

timeout:等待i/o事件發生的超時值;

返回發生事件數。

相對於select模型中的select函式。

Spring Hibernate處理大批量資料

原文 關於使用spring hibernate進行大批量資料的插入和更新,它的效能和使用jdbc preparedstatement的batch批量操作以及資料庫的儲存過程操作幾乎可以一樣高。在hibernate的官方文件裡說到了batchprocessing。spring hibernate大批量...

linux 大批量刪除任務

一不小心投了巨多工,或者投遞的資源不合理時,想批量殺掉這些任務。kill的方法就不說了,我這裡用qdel的方法。用了這麼一條命令 qstat sed 1,2d awk f sed x n s n b x cat再用qdel刪除即可。這裡還是用了兩步,而且用sed將換行符替換為空格很複雜的樣子,不友好...

Oracle儲存過程處理大批量資料

在某次大批量操作後,資料記錄達到 100萬,mobile no 估計有2 萬個重複,現要求刪除重複的號碼 只保留一條 因為該表是業務表,刪除時不能影響業務的正常使用。編寫儲存過程實現刪除重複號碼的功能。要求如下 1 為保證刪除的資料以後可查,在刪除時要先做備份,備份不成功則不能進行刪除。2 要有日誌...