• <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>

            nginx源碼簡單分析

            Posted on 2011-09-27 11:26 冷鋒 閱讀(2231) 評論(0)  編輯 收藏 引用 所屬分類: linux

            由于工作需要,分析了nginx的連接層事件處理模塊,只是初步的大體分析。

            mian函數(nginx.c)里面做一些初始化的工作,最主要的部分,是調用ngx_init_cycle,ngx_master_process_cycle(主進程循環),
            ngx_init_cycle主要是做一些初始化的工作,包括調用ngx_open_listening_sockets打開socket端口監聽等。
            ngx_master_process_cycle函數中,先設置一下需要阻塞的信號,然后是調用ngx_start_worker_processes函數創建worker進程,然后進入一個死循環。里面應該是管理worker進程的,主循環里面調用了sigsuspend函數掛起等待信號,具體怎么管理還沒研究。

            ngx_start_worker_processes:調用ngx_spawn_process,循環創建N個worker進程
            ngx_spawn_process:調用socketpair創建用于父子進程通信的socket,里面進行了一大堆socket參數設置,然后調用worker進程的主循環ngx_worker_process_cycle,
            然后主進程設置進程表相應信息。
            ngx_worker_process_cycle:先調用ngx_worker_process_init初始化進程,里面應該是設置成守護進程等等,有初始化模塊信息,關閉對等socket的其中一個channel,其中比較關鍵的是調用ngx_add_channel_event。里面調用ngx_get_connection返回一個free的ngx_connection_t,最關鍵的是ngx_add_conn,其對應到epoll模塊的ngx_epoll_add_connection,在這里就是添加相應的監聽socket進監聽隊列,并設置連接為激活狀態,可以看到這里epoll是用的ET模式。

            接下來在ngx_worker_process_cycle中,檢查是否配置了多線程模式,如果有,就創建多線程,我只關注多進程,因此先無視它,關鍵點是調用ngx_process_events_and_timers函數,
            ngx_process_events_and_timers:調用ngx_process_events和ngx_event_process_posted,
            ngx_process_events對應是ngx_epoll_process_events,這里會調用epoll_wait,就跟平常的epoll使用一樣。
            ngx_event_process_posted(cycle, &ngx_posted_accept_events);處理accept隊列中所有事件,ngx_posted_accept_events沒有找到初始化的地方,估計是編譯腳本自動生成的,估計會對應到ngx_event_accept函數進行處理,里面就是普通的accept操作,返回fd,并生成一條ngx connection,然后調用ngx_add_conn加入epoll監聽隊列。
            至此,整個流程完成。
            雖然還有很多地方不懂,但總算了解了大體流程了。以上分析不保證正確,僅供參考,僅作為個人學習筆記,歡迎指正。

            posts - 15, comments - 18, trackbacks - 0, articles - 0

            Copyright © 冷鋒

            久久久久成人精品无码| 国内精品久久久久久不卡影院| 亚洲午夜精品久久久久久浪潮 | 久久久久无码精品国产app| 久久精品中文字幕有码| 亚洲人成精品久久久久| 国内精品人妻无码久久久影院| 97精品国产97久久久久久免费| 亚洲精品午夜国产va久久| AV狠狠色丁香婷婷综合久久 | 色狠狠久久AV五月综合| 亚洲成色999久久网站| 日韩欧美亚洲综合久久| 国产一区二区三区久久| 久久精品久久久久观看99水蜜桃| 久久精品麻豆日日躁夜夜躁| 欧美一级久久久久久久大片| 国产精品久久久久aaaa| 色88久久久久高潮综合影院| 久久亚洲av无码精品浪潮| 色噜噜狠狠先锋影音久久| 久久久女人与动物群交毛片 | 99久久精品免费观看国产| 久久综合香蕉国产蜜臀AV| 久久久久99这里有精品10| 久久久中文字幕日本| 国产无套内射久久久国产| 国产一级持黄大片99久久| 丰满少妇高潮惨叫久久久| 久久久久久午夜成人影院| 午夜精品久久久久久毛片| 亚洲欧美久久久久9999| 色综合合久久天天给综看| 久久久亚洲精品蜜桃臀| 青青草国产97免久久费观看| 国内精品久久久久久麻豆| 国内精品久久久久久久涩爱| 久久成人国产精品一区二区| 久久久99精品成人片中文字幕| 国产精品欧美久久久久天天影视 | 中文字幕亚洲综合久久2|