精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久精品免费看| 成人高清网站| 国产综合欧美| 亚洲国产小视频在线观看| 国产精品秘入口18禁麻豆免会员 | 91.成人天堂一区| 国产一区二区三区直播精品电影| 国产又大又黄又粗的视频| 91ph在线| eeuss鲁片一区二区三区在线观看| 日韩av手机在线| 少妇被躁爽到高潮无码文| 成人资源在线播放| 色婷婷综合久久久| 色菇凉天天综合网| 国产精品福利片| 91porn在线视频| 蜜乳av综合| 欧美一级生活片| 日本va中文字幕| 人人澡人人添人人爽一区二区| 91麻豆精品视频| 91精品久久香蕉国产线看观看| 亚洲精品男人的天堂| 欧美在线资源| 伊人伊成久久人综合网小说 | 成人mm视频在线观看| 亚洲影视在线播放| 在线一区高清| 国产大学生校花援交在线播放| 成人网页在线观看| 亚洲自拍欧美另类| 中文字幕永久在线视频| 国产精品久久777777毛茸茸| 久久av红桃一区二区小说| 免费福利视频网站| 欧美调教视频| 欧美mv日韩mv国产网站| 在线播放黄色av| 996久久国产精品线观看| 欧美日韩亚洲网| 亚洲国产成人精品无码区99| 粗大黑人巨茎大战欧美成人| 国产精品久久久久三级| 日本黄网免费一区二区精品| 亚洲日本中文字幕在线| 成人精品免费看| 91在线短视频| a在线观看免费| 国产麻豆精品一区二区| 成人午夜在线观看| 国产精品久久久久久无人区| 免费观看久久久4p| 国产精品久久久久久久久| 精品人妻一区二区三区免费看| 国产一区二区精品| 欧美一级淫片aaaaaaa视频| 日本中文字幕在线免费观看| 亚洲国产专区| 91精品国产色综合| 久久国产视频一区| 三级不卡在线观看| 国产精品高精视频免费| 中文字幕一区2区3区| 久久福利视频一区二区| 国产在线999| 精品人妻一区二区三区四区不卡 | 欧美日韩一区 二区 三区 久久精品| 日韩av一二三四| 成人四虎影院| 欧美夫妻性生活| 国产麻豆剧传媒精品国产| 国产一区二区三区亚洲| 日韩精品在线免费播放| 无码少妇精品一区二区免费动态| 欧美丰满日韩| 欧美极品少妇xxxxⅹ免费视频| 久久精品国产亚洲AV无码男同 | 91在线第一页| 国产精品网站在线看| 亚洲精品视频久久| 一区二区三区在线播放视频| 欧美国产精品| 欧美在线视频观看免费网站| 中文字幕在线观看第二页| 国产综合久久久久久鬼色| 国产精品v欧美精品∨日韩| 日本精品专区| 亚洲欧洲av在线| 青青青在线视频播放| 久久99久久99精品免观看软件| 欧美日韩欧美一区二区| av免费观看不卡| 国产欧美一区| 欧美精品xxx| 自拍偷拍色综合| 成人av在线资源网站| 四虎永久在线精品免费一区二区| 少妇视频在线| 欧洲一区二区三区免费视频| 人妻av一区二区三区| 国产精品入口久久| 国模精品系列视频| 亚洲一区在线观| 91首页免费视频| 黄色网络在线观看| 日韩成人高清| 日韩一区二区三区高清免费看看| 成人片黄网站色大片免费毛片| 伊人久久大香线蕉综合四虎小说| 青青久久aⅴ北条麻妃| 国产高清免费在线观看| 国产农村妇女毛片精品久久麻豆| 成人毛片100部免费看| 精品欧美日韩精品| 亚洲国产小视频在线观看| 99热精品免费| 精品制服美女久久| 日韩.欧美.亚洲| 福利在线免费视频| 欧美一级黄色大片| 97精品在线播放| 日韩成人一级片| 蜜桃传媒视频麻豆第一区免费观看 | 中国a一片一级一片| 99精品欧美一区| 国产成a人亚洲精v品在线观看| 少妇高潮一区二区三区99| 亚洲免费影视第一页| 激情五月色婷婷| 成人福利视频在线| 国产精品视频网站在线观看| 午夜精品久久久久久毛片| 亚洲丝袜在线视频| 亚洲 日本 欧美 中文幕| 99re热这里只有精品免费视频| 美女av免费观看| 欧美a在线观看| 蜜月aⅴ免费一区二区三区| 最新国产中文字幕| 亚洲国产高清不卡| 视色视频在线观看| 久久精品国产68国产精品亚洲| 日韩av快播网址| 四虎影视在线观看2413| 黄色精品一区二区| 男男一级淫片免费播放| 欧美日韩网站| 成人自拍爱视频| 欧洲成人综合网| 欧美mv日韩mv国产网站app| a级黄色片免费看| 国产成人免费在线观看| 伊人再见免费在线观看高清版| 亚洲国产aⅴ精品一区二区三区| 国产一区二区三区毛片| 久久久999久久久| 国产精品萝li| 男女污污视频网站| 红桃视频国产精品| 国产日韩精品推荐| 综合在线影院| 日韩在线视频免费观看| 国产又粗又猛又爽又黄91| 中文子幕无线码一区tr| 污污视频网站在线| 亚洲国产日韩欧美在线| 国产精品9999久久久久仙踪林| aa级大片免费在线观看| 亚洲免费av电影| 自拍偷拍精品视频| 亚洲欧美日韩在线播放| 久久久久无码国产精品一区李宗瑞| 亚洲黄色免费| 欧美日韩在线一区二区三区| 69堂精品视频在线播放| 日韩在线观看免费全集电视剧网站 | 9色国产精品| 日本高清一区| 天堂精品久久久久| 欧美在线激情视频| 日本美女高清在线观看免费| 日韩精品一区二区在线观看| 日本三级小视频| 亚洲欧洲美洲综合色网| 中文视频在线观看| 美女视频黄 久久| 久久人人爽人人爽人人av| 制服丝袜日韩| 2019国产精品视频| 日韩精品三区| 欧美疯狂性受xxxxx另类| 青梅竹马是消防员在线| 制服丝袜日韩国产| 亚洲永久精品在线观看| 国产精品成人网| 欧美一区二区三区成人精品| 国内精品伊人久久久久av影院| 日本xxxxxxxxxx75| 三级电影一区| 免费久久一级欧美特大黄| 清纯唯美激情亚洲| 国产精品久久久久久久美男| 手机在线免费av| 在线精品91av| 天堂中文在线官网| 欧美一级精品大片| 最近中文字幕免费在线观看| 亚洲午夜在线电影| 香蕉久久久久久久| 91片在线免费观看| 一区二区三区欧美精品| 国产农村妇女精品一二区| 国产欧美123| 日韩欧美自拍| 久久精品国产精品国产精品污| 亚洲高清影院| 国产精品自拍小视频| 北岛玲heyzo一区二区| 欧美成aaa人片免费看| 成人高清免费观看mv| 日韩精品在线观看一区| 成人午夜福利视频| 欧美一区二区三区成人| 一区二区三区黄色片| 色网综合在线观看| 久久国产黄色片| 亚洲一区二区3| 黄色一级大片在线免费观看| www日韩大片| 超碰caoprom| 成人午夜视频网站| 又大又长粗又爽又黄少妇视频| 久久国产精品露脸对白| 成人中文字幕av| 国产农村妇女精品一二区| 日本中文字幕亚洲| 国内综合精品午夜久久资源| 免费在线精品视频| 国产精品久久天天影视| 亚洲精品一区二| 日韩精品永久网址| 亚洲精品永久www嫩草| 日韩精品久久久久久久电影99爱| 蜜桃传媒一区二区| 午夜精品影视国产一区在线麻豆| 精品一区久久| 日本无删减在线| 欧美另类暴力丝袜| 日本天码aⅴ片在线电影网站| 九九热这里只有在线精品视| 四虎影视国产在线视频| 欧美激情国产精品| mm视频在线视频| 欧美中文在线观看国产| 黑人巨大精品| 国产精品直播网红| 精品视频一区二区三区在线观看| 亚洲自拍偷拍色片视频| 日韩一区二区三区高清在线观看| 成人h在线播放| 蜜臀av一区| 日产国产精品精品a∨| 欧美电影《轻佻寡妇》| 在线观看免费黄色片| 午夜精品999| 亚洲国产成人精品无码区99| 香蕉久久a毛片| 天天综合网日韩| 国产大片一区二区| 精品熟女一区二区三区| 久久影音资源网| 国产日产在线观看| 亚洲综合男人的天堂| 久久久久久久久久久久久久av| 一本久久精品一区二区| 一区二区三区免费在线| 欧美成人一区二区三区片免费 | 国产精品一区二区三区四区| 野战少妇38p| 国产欧美日韩三区| 成年人午夜剧场| 激情成人中文字幕| 亚洲天堂国产精品| 精品精品国产高清a毛片牛牛| 色欲av永久无码精品无码蜜桃| 亚洲网站在线播放| 主播国产精品| 国产91免费看片| 91麻豆精品国产91久久久久推荐资源| 精品无人区一区二区三区竹菊| 欧美一二区在线观看| 人妻激情另类乱人伦人妻| 欧美一级视频| 麻豆传媒在线看| ww久久中文字幕| 九九热国产精品视频| 91福利社在线观看| 亚洲精品网站在线| 中文字幕亚洲欧美日韩高清| 日本xxxxwww| 最新国产成人av网站网址麻豆| 金瓶狂野欧美性猛交xxxx| 国产精品国模在线| 福利在线一区| 中国成人在线视频| 久久av最新网址| 师生出轨h灌满了1v1| 国产精品免费久久久久| 毛片基地在线观看| 日韩欧美一级二级三级| 91精品专区| 国产成人久久精品| 久久久精品国产**网站| 免费在线精品视频| 久久国产日韩欧美精品| 中文字幕av网址| 亚洲国产wwwccc36天堂| 99久久久无码国产精品免费| 在线观看日韩www视频免费| 黄色在线网站噜噜噜| 成人综合av网| 欧美日本精品| 无码人妻一区二区三区在线视频| 亚洲国产精品黑人久久久| 中文字幕第15页| 亚洲精品wwwww| 国产激情在线播放| 国产免费一区| 亚洲三级色网| 美女露出粉嫩尿囗让男人桶| 亚洲欧美日韩一区二区三区在线观看| 亚洲天堂aaa| 精品国产一区二区三区在线观看| 欧美黄色三级| 日韩一二三区不卡在线视频| 美女国产精品| 亚洲精品视频久久久| 欧美性猛交xxxx偷拍洗澡| 免费观看国产精品| 久久久女人电视剧免费播放下载| 亚洲视频三区| 又大又硬又爽免费视频| 成人黄色在线网站| 日韩乱码在线观看| 精品无码久久久久久国产| 亚洲天堂免费电影| 国产精品久久久久久久久| 激情综合网站| 伊人影院综合在线| 中文字幕一区二区三区四区| 亚洲天堂手机在线| 久久九九国产精品怡红院| 不卡精品视频| 国产精彩视频一区二区| 成人国产在线观看| 天天操天天干视频| 亚洲图片在区色| 国产成人精选| 国产精品88久久久久久妇女| 国产福利一区二区三区视频| 国产精品999久久久| 亚洲精品天天看| 91p九色成人| 黄色污污在线观看| 不卡视频一二三| 男人的天堂av网站| 精品国内亚洲在观看18黄| 88久久精品| 丁香啪啪综合成人亚洲| 国产精品久久久爽爽爽麻豆色哟哟| 99久久国产热无码精品免费| 久久久视频精品| 国产一区二区亚洲| 在线播放免费视频| 激情成人中文字幕| av中文资源在线| 国产99午夜精品一区二区三区| av不卡在线看| 国产人与禽zoz0性伦| 亚洲а∨天堂久久精品9966| 亚洲1234区| 秋霞在线一区二区| 91在线免费视频观看| 91亚洲精品国偷拍自产在线观看| 欧美激情中文字幕乱码免费| 沈樵精品国产成av片| 一级片免费在线观看视频| 精品久久久久久久久久ntr影视| av电影在线观看| 激情伦成人综合小说| 另类成人小视频在线| 国产高潮久久久| 久久亚洲精品成人| 国产精品一在线观看| 制服.丝袜.亚洲.中文.综合懂| 91黄色免费观看| 丁香高清在线观看完整电影视频 | wwwav在线| 欧洲成人一区二区|