• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            XGuru's Blog

            技術(shù),是一種態(tài)度。關(guān)注:高性能后端技術(shù)/服務(wù)器架構(gòu)/C++/C/LAMP

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

            公告





            twitter / xoXGuru

            feedsky
            抓虾
            google reader
            鲜果
            QQ邮箱
            九点

            常用鏈接

            留言簿(12)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

             

            2.1 event_base核心事件基類數(shù)據(jù)結(jié)構(gòu)



             


                  可以看出event_base是整個(gè)libevent的核心部分,它由三種結(jié)構(gòu)構(gòu)成:一個(gè)時(shí)間堆 (對(duì)應(yīng)EVLIST_TIMEOUT),一個(gè)已注冊(cè)隊(duì)列(對(duì)應(yīng)EVLIST_INSERTE),一個(gè)活躍事件隊(duì)列(對(duì)應(yīng)EVLIST_ACTIVE)。

                  時(shí)間堆采用的是min-Heap最小二叉堆,已注冊(cè)隊(duì)列和活躍事件隊(duì)列采用的都是雙向鏈表。

                  已注冊(cè)隊(duì)列對(duì)應(yīng)事件基中的eventqueue,活躍事件隊(duì)列對(duì)應(yīng)的是事件基中的activequeues[ev->ev_pri]結(jié)構(gòu)體數(shù)組。其中的ev_pri代表的是事件的優(yōu)先級(jí),數(shù)值越小代表越高的優(yōu)先級(jí)別。

                  可以通過(guò)調(diào)用event_priority_set()函數(shù)對(duì)其優(yōu)先級(jí)進(jìn)行設(shè)置,默認(rèn)插入中等優(yōu)先級(jí)(nactivequeues/2 ,即活躍隊(duì)列總數(shù)除以2)。


             

            2.2 超時(shí)隊(duì)列(min-Heap最小二叉堆)

                  在這里處理超時(shí)機(jī)制中使用了一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu)min-Heap,源碼位于Min_heap.h

            libevent從1.4版本之后就開始采用min-Heap來(lái)代替RB-Tree。

            min-Heap(最小二叉堆)遵循的原則:

            1.它是一種完全二叉樹

            2.它最小的元素在頂端每個(gè)元素都比它的父節(jié)點(diǎn)大(或相等)。

            插入元素時(shí)間復(fù)雜度為O(log n),找出最小值的復(fù)雜度僅為O(1)。

            libevent實(shí)現(xiàn)的min-Heap變量名有點(diǎn)猥瑣。

            1typedef struct min_heap
            2{
            3    struct event** p;
            4    unsigned n, a;
            5}
             min_heap_t;
            6

             

             

            p可以理解成存儲(chǔ)事件指針的數(shù)組,n表示的是容量,a表示的是當(dāng)前數(shù)。

            堆的操作函數(shù)里一般e代表事件,s代表被操縱的min-Heap。

            這個(gè)min-heap作者應(yīng)該是OOP陣營(yíng)的,其中出現(xiàn)有對(duì)應(yīng)構(gòu)造函數(shù)的min_heap_ctor(),和對(duì)應(yīng)析構(gòu)函數(shù)min_heap_dtor()。


             

            2.3事件隊(duì)列(雙向鏈表)

            libevent中的活躍事件隊(duì)列和已注冊(cè)隊(duì)列采用的數(shù)據(jù)結(jié)構(gòu)都是用宏來(lái)實(shí)現(xiàn)的,原在freeBSD的<sys/queue.h>中已有定義,為了對(duì)Linux跨平臺(tái)支持考慮,libevent將部分代碼集中到event_internal.h里。


            1#define TAILQ_ENTRY(type)                        \
            2struct {                                         \
            3    struct type *tqe_next;    /* 下一個(gè)元素 */         \
            4    struct type **tqe_prev;    /*上一個(gè)元素的地址*/      \
            5}

            6

             

            libevent用到的宏操作

            宏名稱

            操作

            TAILQ_INIT

            初始化隊(duì)列

            TAILQ_FOREACH

            對(duì)隊(duì)列進(jìn)行遍歷操作

            TAILQ_INSERT_BEFORE

            在指定元素之前插入元素

            TAILQ_INSERT_TAIL

            在隊(duì)列尾部插入元素

            TAILQ_EMPTY

            檢查隊(duì)列是否為空

            TAILQ_REMOVE

            從隊(duì)列中移除元素

            posted on 2010-06-24 00:23 XGuru 閱讀(1981) 評(píng)論(1)  編輯 收藏 引用

            Feedback

            # re: [原創(chuàng)]Libevent學(xué)習(xí)筆記(2)-基本數(shù)據(jù)結(jié)構(gòu) 2012-06-13 11:29 Filipe
            Please translate this to english! thank you  回復(fù)  更多評(píng)論
              


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产精品久久婷婷六月丁香| 久久久99精品成人片中文字幕| 久久久久久久久久久免费精品 | 成人免费网站久久久| 成人久久精品一区二区三区| 色综合久久天天综合| 欧美粉嫩小泬久久久久久久 | 久久这里只有精品首页| 91麻精品国产91久久久久| 欧美久久久久久| 成人亚洲欧美久久久久| 久久国产热这里只有精品| 色欲综合久久躁天天躁| 久久亚洲私人国产精品vA| 97精品国产97久久久久久免费| 99久久精品国产综合一区 | 精品久久777| 久久久久久久精品成人热色戒| 久久婷婷国产综合精品| 香蕉aa三级久久毛片| 91久久成人免费| 久久精品午夜一区二区福利| 欧美与黑人午夜性猛交久久久 | 波多野结衣中文字幕久久| 午夜精品久久久久久久无码| 国产情侣久久久久aⅴ免费| 一本久久a久久精品vr综合| 亚洲国产精品一区二区三区久久| 久久精品国产免费一区| 国产精品无码久久综合 | 色综合久久夜色精品国产| 久久精品国产91久久综合麻豆自制| 性欧美大战久久久久久久久| 热久久国产欧美一区二区精品| 国产精品gz久久久| 国产精品狼人久久久久影院 | 欧美成a人片免费看久久| 久久免费国产精品| 色偷偷91久久综合噜噜噜噜| 精品久久久久成人码免费动漫| 久久亚洲色一区二区三区|