精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux高性能網絡編程十談 | 信號和定時器

系統 Linux
在Linux網絡編程中,信號處理和定時器是經常遇到的功能,在聊這塊內容之前如果您看過上一篇文章《Linux高性能網絡編程十談|IO復用和模式》,應該比較完整的了解epoll了,但是這里還遺漏了一個知識點,那開始先補上這個坑。

在Linux網絡編程中,信號處理和定時器是經常遇到的功能,在聊這塊內容之前如果您看過上一篇文章《Linux高性能網絡編程十談|IO復用和模式》,應該比較完整的了解epoll了,但是這里還遺漏了一個知識點,那開始先補上這個坑。

關于epoll驚群問題,什么是驚群呢?

比如我們在寫代碼過程中,使用兩個線程的epoll監聽socket,當socket上有事件發生時,兩個epoll都會被喚醒,導致會操作同一個socket,這就是驚群,那如何解決呢?

(1)使用EPOLLEXCLUSIVE:EPOLLEXCLUSIVE是epoll的擴展選項,它允許一個線程獨占一個epoll實例,從而避免了epoll的驚群問題;

(2)使用EPOLLONESHOT:對于注冊了EPOLLONESHOT事件的文件描述符,操作系統最多觸發一個可讀,可寫或者異常事件,且觸發一次,這樣就能確保一個線程獲取事件并處理,但是需要注意的是對于監聽類型(如accept)不能使用EPOLLONESHOT,否則就不能持續監聽連接,對于處理完了的非監聽事件,需要重置EPOLLONESHOT;

第一部分:信號

1、發送信號給進程

#include <sys/types.h>
#include <signal.h>

int kill(pid_t pid, int sig);

(1)pid的取值和含義如下:

(2)sig的取值和含義如下(在linux命令行使用kill -l查看取值,這里列幾個經常使用的):

2、信號回調函數

#include <signal.h>

typedef void (&__sighandler_t) (int);

__sighandler_t signal(int sig, __sighandler_t _handler);

int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);

(1)__sighandler_t信號處理的函數指針,其中處理參數為觸發信號當前值,其中有兩個默認宏(SIG_DFL:使用信號默認處理,SIG_IGN:忽略目標信號);

(2)signal注冊信號回調處理函數,返回值為一個函數指針,含義是這個信號上一次處理的回調函數或者是系統默認的處理函數,這里目的是讓用戶可以自己恢復信號處理方式,比如系統對于一些信號是殺掉進程的,這里就應該處理完自己的回調邏輯后再調用系統默認行為;

(3)sigaction函數的功能是檢查或修改與指定信號相關聯的處理動作,使用樣例如下:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
 
int main()
{
    struct sigaction newact, oldact;
 
    newact.sa_handler = SIG_IGN; // 設置信號忽略,也可以設置為處理函數
    sigemptyset(&newact.sa_mask);
    newact.sa_flags = 0;
    int count = 0;
    pid_t pid = 0;
 
    sigaction(SIGINT, &newact, &oldact); // 原始的備份到oldact,為后續的處理恢復
 
    pid = fork();
    if (pid == 0)
    {
        while(1)
        {
            printf("child exec ...\n");
            sleep(1);
        }
        return 0;
    }
 
    while (1)
    {
        if (count++ > 3)
        {
            sigaction(SIGINT, &oldact, NULL); // 恢復父進程信號處理方式
            kill(pid, SIGKILL); // 父進程發信號給子進程
        }
 
        printf("father exec ...\n");
        sleep(1);
    }
 
    return 0;
}

第二部分:定時器

在Linux網絡編程中,定時器的作用主要是管理定時任務,處理過期連接,檢測超時隊列等,那我們可以通過哪些方式實現定時器呢?

1、利用系統API

...
setsockopt(socketfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, len);
setsockopt(socketfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, len);
int number = epoll_wait(fd, events, MAX_EVENT_NUMBER, timeout);
...

通過使用socket的參數,設置連接句柄的發送和接收數據超時時間,可以實現定時處理:

(1)SO_SNDTIMEO發送數據超時時間,根據timeout設置;

(2)SO_RCVTIMEO接收數據超時時間,根據timeout設置;

IO復用的參數中都帶了一個timeout參數,可以設置來達到定時觸發分支邏輯,比如epoll_wait;

2、簡單的定時器

(1)啟動一個線程實現定時器,具體實現如下圖:

  1. 主線程啟動,開始執行任務,這里可以是網絡收發或者其他;
  2. 啟動一個線程,做定時任務處理使用;
  3. 主線程需要增加定時任務,可以將任務封裝為task,添加到任務隊列中;
  4. 同時通知定時線程,隊列中有任務了,這里通知機制可以是信號量或者廣播方式;
  5. 定時線程取出隊列中任務,判斷當前任務是否過期,如果過期就執行,沒有過期就繼續放入任務隊列中,同時這里需要讓線程等待隊列中距離下一個周期最短的時間,繼續取隊列任務;

(2)使用epoll_wait設置timeout,是在網絡事件觸發的定時器中最方便的方式,具體邏輯如下:

... 
start_timer = ... // 開始執行時間
while (true) {
    int number = epoll_wait(epfd, events, MAX_EVENT_NUMBER, timeout);
    for (...) {
        ...
        // 處理連接任務
        ...
    }
    end_timer = ... // epoll_wait返回并處理任務時間
    // 處理定時任務,判斷當前時間是否在一個timeout
    if (end_timer - start_timer > timeout) { // 這里是偽代碼,具體時間判斷可以參考linux結構體
        ...
        // 啟動線程執行定時任務邏輯
        ...
    }
}

3、時間輪

時間輪是一種高效定時器,通過類似圓盤的形式定義每個tick,定時轉動圓盤,假設每次tick時間為si,一個時間輪有N個tick,那么執行轉動一圈時間為N*si;

現在插入一個任務,需要to1時間周期后執行,這里就分情況處理:

(1)如果to1 < N*si,則需要分配到(當前時間輪的位置 + to1 / si)的位置上,等待自然tick到達執行當前to1的定時任務;

(2)如果to1 > N*si,則需要分配到(當前時間輪的位置 + (to1 % N) / si + N)的位置上,由于to1執行時間超過一輪的周期,所以需要等待多輪轉動后才能執行,那如何處理呢?因此我們將每個輪的tick上掛一個鏈表,這個鏈表的節點表示到達這個tick需要執行的任務to1,這里的節點有可能是大于一個輪轉動的事件周期,也可能就是當前輪時間周期內執行,我們只需要當事件到達tick時,取出鏈表遍歷鏈表節點to1,判斷是否是當前事件周期內執行,如果是摘除鏈表節點然后執行任務,如果不是則重新計算to1需要多久后執行,計算方法就和上面的一樣(當前時間輪位置 + ((to1 - 鏈表最小的周期時間) % N) / si + N),然后將當前鏈表節點重新放回;

事件輪事件輪

4、時間堆

堆的數據結構應該大家都比較熟悉了,堆是一種滿足以下條件的樹:

  • 堆中某個節點的值總是不大于或不小于其父節點的值;
  • 堆總是一棵完全二叉樹;
  • 添加堆節點的時間復雜度O(lgn),刪除節點是O(lgn),獲取節點是O(1);

時間堆時間堆

(1)循環線程讀取最小時間堆的堆頂元素;

(2)取出最小節點,判斷當前事件是否過期,如果過期則繼續執行,否則不處理;

(3)將最小節點對應的事件丟給執行線程執行;

這里最小時間堆節點在代碼實現中可以用一個數組表示,使用完全二叉樹的排列。

#include<iostream>

void heapify(int arr[], int n, int i) {
    if (i >= n) return;
    
    int min_node = i;
    int lson = i * 2 + 1;
    int rson = i * 2 + 2;
    if (lson < n && arr[min_node] > arr[lson]) { // 和左孩子比較,找到最小節點
        min_node = lson;
    }
    if (rson < n && arr[min_node] > arr[rson]) { // 和右孩子比較,找到最小節點
        min_node = rson;
    }
    if (min_node != i) {
        swap(arr[min_node], arr[i]);
        heapify(arr, n, min_node); // 遞歸處理
    }
}

void heapSort(int arr[], int n) {
    // 反向取出最后一個節點
    int lastNode = n - 1;
    int parent = (lastNode - 1) / 2;
    for (int i = parent; i >= 0; i--) {
        heapify(arr, n, i); 
    }

    for (int i = n - 1; i >= 0; i--) {
        swap(arr[i], arr[0]);
        heapify(arr, i, 0); // 調整堆節點
    }
}

int main() {
    int arr[5] = { 70, 41, 10, 90, 18, 26 };
    heap_sort(arr, sizeof(arr) / sizeof(arr[0]));
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        cout << arr[i] << endl;
    }
    return 0;
}


責任編輯:華軒 來源: 周末程序猿
相關推薦

2024-03-18 13:43:20

Linux架構

2023-11-01 11:59:13

2023-11-01 10:38:46

Linux高性能網絡編程

2023-11-01 11:51:08

Linux性能優化

2023-11-01 11:27:10

Linux協程

2023-11-01 11:40:46

Linux高性能網絡編程工具

2023-11-01 10:58:31

系統調用高性能網絡編程Linux

2023-11-01 11:07:05

Linux高性能網絡編程線程

2023-11-01 11:20:57

2023-11-01 10:43:31

Linux高性能網絡編程

2025-06-26 01:27:00

2021-07-27 16:01:29

高并發定時器高性能

2009-11-11 10:14:10

linux定時器操作系統

2024-10-06 14:37:52

2024-08-06 08:22:18

2024-09-03 09:15:37

2024-10-16 11:03:30

Linux高性能編程

2023-12-11 09:50:35

Linux定時器

2023-01-10 13:53:21

Linux定時器

2020-11-06 18:51:17

LinuxTCP服務器
點贊
收藏

51CTO技術棧公眾號

青青草精品视频| 久久不见久久见免费视频7| 亚洲制服丝袜一区| 翡翠波斯猫1977年美国| 亚洲免费在线观看av| 嫩草影视亚洲| 91精品国产综合久久精品性色| 久久人人爽人人爽人人av| 国产私人尤物无码不卡| 国产精品一区三区| 日韩av不卡电影| 国产精品老熟女一区二区| 一道在线中文一区二区三区| 欧美精品v国产精品v日韩精品| 国产成人在线小视频| 国产日本在线视频| 国产成人aaaa| 国产精品尤物福利片在线观看| 国产精品99精品无码视| 日本大胆欧美| 日韩国产在线看| 欧美色图校园春色| 巨胸喷奶水www久久久| 亚洲线精品一区二区三区八戒| 欧美精品一区二区三区在线看午夜| 国产婷婷一区二区三区久久| 男人的天堂亚洲在线| 欧美日韩国产123| 日本视频在线免费| 偷拍亚洲色图| 精品成人在线观看| 制服丝袜中文字幕第一页 | 亚洲欧美偷拍另类| 欧美极品免费| 精品久久久香蕉免费精品视频| 日韩中文在线字幕| 免费在线看a| 国产欧美日韩在线视频| 久久伊人一区二区| 日韩一级片免费观看| 国产美女娇喘av呻吟久久| 国产日韩在线视频| 青青国产在线视频| 亚洲欧美日韩国产一区二区| 国内精品久久久久久| 亚洲国产美女视频| 91久久久精品国产| 精品精品国产国产自在线| 国产精品成人在线视频| 欧美色就是色| 亚洲小视频在线观看| aaaaa级少妇高潮大片免费看| 国产精品久久久网站 | 手机看片福利永久| av在线不卡电影| 精品国产一区二区三| 后进极品白嫩翘臀在线视频| 国产成人精品影视| 成人在线视频网址| 亚洲成人久久精品| 成人免费毛片高清视频| 国产精品日韩一区二区免费视频| 风流少妇一区二区三区91| 国产宾馆实践打屁股91| 国产伦精品一区二区三区照片91| 韩国av电影在线观看| 粉嫩嫩av羞羞动漫久久久| 不卡一区二区三区视频| 亚洲av综合色区无码一二三区 | 国产黄色网址在线观看| 久久99高清| 国产一区二区三区直播精品电影 | 少妇人妻一区二区| 91丨porny丨户外露出| 欧洲国产精品| 伦xxxx在线| 亚洲精品成a人| 国产aaa免费视频| 手机在线理论片| 在线观看免费成人| 激情文学亚洲色图| 日韩三级不卡| 日韩电影中文字幕av| 99精品欧美一区二区| 欧美成人milf| 久久久久久久久久久91| 欧美一级特黄视频| 久久国产精品99久久久久久老狼 | 亚洲欧美在线视频| 国产精品www在线观看| 性孕妇free特大另类| 欧美视频完全免费看| 国产精品嫩草影视| 开心激情综合| 中文字幕国产日韩| 激情五月少妇a| 久久久久在线| 亚洲qvod图片区电影| 无码精品人妻一区二区| 国产欧美综合在线观看第十页| 正在播放国产精品| 国产精品13p| 欧美性猛交一区二区三区精品| 古装做爰无遮挡三级聊斋艳谭| 日本一区福利在线| 久久久av一区| 精品人妻一区二区色欲产成人| 免费成人av资源网| 国产尤物91| 日本在线视频网| 天天射综合影视| www.com污| 神马日本精品| 欧美另类暴力丝袜| 中文字幕丰满人伦在线| 国产99久久久国产精品潘金| 亚洲v国产v在线观看| 国产夫妻在线| 日韩三区在线观看| 在线观看免费黄色网址| 久久av在线| 国产高清精品一区二区三区| 欧美日韩在线看片| 在线欧美日韩国产| 黄色录像a级片| 综合av在线| 国产欧美日韩最新| 国产三区四区在线观看| 精品久久久久久久久中文字幕 | 免费在线黄网站| av在线播放一区二区| 伊人伊成久久人综合网站| 国产污污视频在线观看| 国产不卡视频在线播放| 四虎永久免费网站| 亚洲tv在线| 中文字幕国产亚洲2019| 中国a一片一级一片| 久久久一区二区| 毛片在线播放视频| 风间由美性色一区二区三区四区| 久久精品国产清自在天天线| 一区二区三区在线免费观看视频| 久久久美女毛片| 欧美日韩亚洲第一| 日韩动漫一区| 538国产精品一区二区在线 | √资源天堂中文在线| 99免费精品视频| 久久久久久久久久网| 成人h动漫免费观看网站| 欧美日本国产在线| 好吊色一区二区三区| 亚洲国产综合色| 怡红院一区二区| 亚洲毛片视频| 欧美凹凸一区二区三区视频| 热色播在线视频| 精品亚洲男同gayvideo网站| 91精品国产综合久久久蜜臀九色| av电影天堂一区二区在线| 人人干视频在线| 日韩欧美黄色| 日本精品久久久久久久| 久久免费看视频| 欧美在线色视频| 永久免费看片视频教学| 国产精品一区一区三区| 日本丰满少妇xxxx| 亚洲美女久久| 国产精品女视频| 麻豆av免费在线观看| 日韩美女在线视频| 天天爽夜夜爽夜夜爽精品| 国产午夜亚洲精品不卡 | 国产iv一区二区三区| 日韩小视频网站| 天天躁日日躁狠狠躁欧美| 国产精品九九九| 国产福利视频在线观看| 亚洲国产高清福利视频| 免费观看日批视频| 国产精品久久夜| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲国产精品悠悠久久琪琪| 伊人中文字幕在线观看| 国产精品卡一卡二| 深田咏美中文字幕| 日韩激情在线观看| av 日韩 人妻 黑人 综合 无码| 婷婷五月色综合香五月| 成人黄色av免费在线观看| 高清电影在线观看免费| 亚洲午夜性刺激影院| 国产极品久久久| 一本色道久久综合亚洲aⅴ蜜桃 | 成人嫩草影院| 97国产超碰| 欧美性片在线观看| 欧美精品xxx| 岛国在线大片| 亚洲精品一区二区三区99 | 日韩亚洲欧美高清| 男人天堂视频网| 亚洲一二三级电影| av资源在线免费观看| 99热这里都是精品| 涩涩网站在线看| 噜噜噜在线观看免费视频日韩 | 91在线观看网站| 日本在线视频一区二区| 久久久久久这里只有精品| 91官网在线| 日韩高清免费观看| 精品人妻一区二区三区三区四区 | 精品人妻午夜一区二区三区四区| 色综合天天综合色综合av| 久久网中文字幕| 成人欧美一区二区三区黑人麻豆| 国产精品jizz| 成人手机电影网| 亚洲综合激情视频| 日本aⅴ亚洲精品中文乱码| 男女超爽视频免费播放| 国色天香一区二区| 一区二区三区我不卡| 久久av综合| 麻豆视频成人| 欧美午夜18电影| 成人欧美一区二区| 成人黄色91| 国产一区二区视频在线观看| 国产成人免费9x9x人网站视频| 2019中文字幕在线免费观看| 国产第一页在线视频| 欧美成人网在线| 久草资源在线观看| xx视频.9999.com| av资源种子在线观看| 亚洲欧美另类人妖| 天天av天天翘| 亚洲国产天堂网精品网站| 亚洲精品一区二区三区区别| 日韩欧美在线网站| 国产女18毛片多18精品| 欧美精品tushy高清| 国产精品久久久久久久成人午夜 | 久久久精品三级| 日韩精品乱码av一区二区| 男人揉女人奶房视频60分| 亚洲影视综合| 久久美女福利视频| 美女精品在线观看| 日日碰狠狠丁香久燥| 久久av最新网址| 亚洲综合在线网站| 日本成人在线不卡视频| 一级在线免费视频| 久久精品二区亚洲w码| 亚洲男人天堂av在线| 国产米奇在线777精品观看| 日日夜夜精品视频免费观看| 国产一区999| 日本人添下边视频免费| 91偷拍与自偷拍精品| 日韩在线免费观看av| 中文字幕av一区二区三区高| 国产精品精品软件男同| 一区二区三区久久| 日韩毛片在线视频| 色综合欧美在线| 在线免费观看一级片| 欧美成人艳星乳罩| 香港三日本三级少妇66| 伊人av综合网| 羞羞视频在线观看不卡| 91精品国产色综合| 秋霞国产精品| 97国产超碰| 在线日韩一区| www.黄色网址.com| 99国产精品视频免费观看一公开 | 中文字幕欧美日韩一区二区三区| 牛牛国产精品| 99re在线视频免费观看| 久久精品国产99久久6| 国产伦精品一区二区三区精品| 久久久久国产精品麻豆ai换脸| 久久视频一区二区三区| 亚洲综合色噜噜狠狠| 亚洲黄色免费观看| 制服丝袜在线91| 污污网站在线免费观看| xxxxx成人.com| 国产自产自拍视频在线观看| 91精品国产综合久久男男| 国产精品成人自拍| 亚洲精品一区二区三区蜜桃久| 这里只有精品在线| 国产极品美女高潮无套久久久| 国产在线麻豆精品观看| 国产精品一区二区入口九绯色| 成人欧美一区二区三区小说| 二区视频在线观看| 日韩一级精品视频在线观看| 免费在线高清av| 国内自拍欧美激情| 久久爱.com| 欧美日韩精品免费看| 欧美特黄视频| 国产九九热视频| 久久久久青草大香线综合精品| 国产第一页第二页| 91精品欧美福利在线观看| 青春草在线观看| 欧美激情欧美激情| 警花av一区二区三区| 天天综合色天天综合色hd| 亚洲影院在线| 亚洲色偷偷色噜噜狠狠99网 | 99久在线精品99re8热| 日韩一区二区三区四区| 色开心亚洲综合| 国产不卡视频在线| 欧美大片网址| 欧美视频在线观看视频| 国产精品 日产精品 欧美精品| 女人裸体性做爰全过| 欧洲在线/亚洲| 日韩福利一区二区| 97精品国产91久久久久久| 久久精品免视看国产成人| 成人短视频在线看| 另类人妖一区二区av| 无码少妇精品一区二区免费动态| 精品欧美aⅴ在线网站| 天堂在线视频免费观看| 性色av一区二区咪爱| 麻豆国产欧美一区二区三区r| 国产精品久久久久久久乖乖| 福利一区二区在线| 久久精品无码人妻| 欧美tickling挠脚心丨vk| 欧洲在线视频| 国产精品日韩欧美一区二区三区| 精品白丝av| 国产肉体xxxx裸体784大胆| 午夜影院在线观看欧美| 亚洲欧美激情在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产精品久久久久久久久久久久久久久 | 后入内射无码人妻一区| 欧美日韩国产精品一区| 刘亦菲毛片一区二区三区| 欧美精品日韩三级| 大奶一区二区三区| www.日本在线播放| 91浏览器在线视频| 欧美超碰在线观看| 色爱av美腿丝袜综合粉嫩av| 久久亚洲精品人成综合网| 一区二区日本伦理| 国精产品一区一区三区mba视频| 999精品久久久| 欧美成人免费网站| √最新版天堂资源网在线| 美脚丝袜一区二区三区在线观看| 亚洲欧美视频| 一区二区三区在线播放视频| 欧美日韩一区精品| 精品三级久久久久久久电影聊斋| 国产不卡视频在线| 色综合久久网| 亚洲av午夜精品一区二区三区| 亚洲在线视频一区| 青青草免费观看免费视频在线| 国产极品精品在线观看| 亚洲欧洲中文字幕| 激情小说欧美色图| 亚洲午夜久久久久中文字幕久| 桃花色综合影院| 欧洲永久精品大片ww免费漫画| 日韩系列欧美系列| 久久久九九九热| 欧美性猛交xxxx偷拍洗澡| 视频国产在线观看| 成人乱色短篇合集| 亚洲特级毛片| 国产精品久久久久久久无码| 欧美性大战久久| 在线观看中文| 日本电影一区二区三区| 黄页网站大全一区二区| 国产又黄又粗又爽| 中文字幕日韩免费视频| 久久1电影院| xxx国产在线观看| 狠狠久久亚洲欧美专区| av大片在线观看| 久久96国产精品久久99软件|