国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看

歡迎來到010在線作文網(wǎng)!

最新線程池介紹論文

實(shí)用文 時間:2021-08-31 手機(jī)版

  線程池是Mysql5.6的一個核心功能,對于服務(wù)器應(yīng)用而言,無論是web應(yīng)用服務(wù)還是DB服務(wù),高并發(fā)請求始終是一個繞不開的話題。當(dāng)有大量請求并發(fā)訪問時,一定伴隨著資源的不斷創(chuàng)建和釋放,導(dǎo)致資源利用率低,降低了服務(wù)質(zhì)量。線程池是一種通用的技術(shù),通過預(yù)先創(chuàng)建一定數(shù)量的線程,當(dāng)有請求達(dá)到時,線程池分配一個線程提供服務(wù),請求結(jié)束后,該線程又去服務(wù)其他請求。 通過這種方式,避免了線程和內(nèi)存對象的頻繁創(chuàng)建和釋放,降低了服務(wù)端的并發(fā)度,減少了上下文切換和資源的競爭,提高資源利用效率。所有服務(wù)的線程池本質(zhì)都是位了提高資源利用效率,并且實(shí)現(xiàn)方式也大體相同。本文主要說明Mysql線程池的實(shí)現(xiàn)原理。

  在Mysql5.6出現(xiàn)以前,Mysql處理連接的方式是One-Connection-Per-Thread,即對于每一個數(shù)據(jù)庫連接,Mysql-Server都會創(chuàng)建一個獨(dú)立的線程服務(wù),請求結(jié)束后,銷毀線程。再來一個連接請求,則再創(chuàng)建一個連接,結(jié)束后再進(jìn)行銷毀。這種方式在高并發(fā)情況下,會導(dǎo)致線程的頻繁創(chuàng)建和釋放。當(dāng)然,通過thread-cache,我們可以將線程緩存起來,以供下次使用,避免頻繁創(chuàng)建和釋放的問題,但是無法解決高連接數(shù)的問題。One-Connection-Per-Thread方式隨著連接數(shù)暴增,導(dǎo)致需要創(chuàng)建同樣多的服務(wù)線程,高并發(fā)線程意味著高的內(nèi)存消耗,更多的上下文切換(cpu cache命中率降低)以及更多的資源競爭,導(dǎo)致服務(wù)出現(xiàn)抖動。相對于One-Thread-Per-Connection方式,一個線程對應(yīng)一個連接,Thread-Pool實(shí)現(xiàn)方式中,線程處理的最小單位是statement(語句),一個線程可以處理多個連接的請求。這樣,在保證充分利用硬件資源情況下(合理設(shè)置線程池大小),可以避免瞬間連接數(shù)暴增導(dǎo)致的服務(wù)器抖動。

調(diào)度方式實(shí)現(xiàn)

  Mysql-Server同時支持3種連接管理方式,包括No-Threads,One-Thread-Per-Connection和Pool-Threads。No-Threads表示處理連接使用主線程處理,不額外創(chuàng)建線程,這種方式主要用于調(diào)試;One-Thread-Per-Connection是線程池出現(xiàn)以前最常用的方式,為每一個連接創(chuàng)建一個線程服務(wù);Pool-Threads則是本文所討論的線程池方式。Mysql-Server通過一組函數(shù)指針來同時支持3種連接管理方式,對于特定的方式,將函數(shù)指針設(shè)置成特定的回調(diào)函數(shù),連接管理方式通過thread_handling參數(shù)控制,代碼如下:

  if (thread_handling <= SCHEDULER_ONE_THREAD_PER_CONNECTION) one_thread_per_connection_scheduler(thread_scheduler, &max_connections, &connection_count);else if (thread_handling == SCHEDULER_NO_THREADS) one_thread_scheduler(thread_scheduler);else pool_of_threads_scheduler(thread_scheduler, &max_connections,&connection_count);

  連接管理流程

  通過poll監(jiān)聽mysql端口的連接請求

  收到連接后,調(diào)用accept接口,創(chuàng)建通信socket

  初始化thd實(shí)例,vio對象等

  根據(jù)thread_handling方式設(shè)置,初始化thd實(shí)例的scheduler函數(shù)指針

  調(diào)用scheduler特定的add_connection函數(shù)新建連接

  下面代碼展示了scheduler_functions模板和線程池對模板回調(diào)函數(shù)的實(shí)現(xiàn),這個是多種連接管理的核心。

  struct scheduler_functions { uint max_threads; uint *connection_count; ulong *max_connections; bool (*init)(void); bool (*init_new_connection_thread)(void); void (*add_connection)(THD *thd); void (*thd_wait_begin)(THD *thd, int wait_type); void (*thd_wait_end)(THD *thd); void (*post_kill_notification)(THD *thd); bool (*end_thread)(THD *thd, bool cache_thread); void (*end)(void);};static scheduler_functions tp_scheduler_functions= { 0, // max_threadsNULL,NULL, tp_init, // initNULL, // init_new_connection_threadtp_add_connection, // add_connectiontp_wait_begin, // thd_wait_begin tp_wait_end, // thd_wait_endtp_post_kill_notification, // post_kill_notification NULL, // end_threadtp_end // end };

線程池的相關(guān)參數(shù)

  thread_handling:表示線程池模型。 thread_pool_size:表示線程池的group個數(shù),一般設(shè)置為當(dāng)前CPU核心數(shù)目。理想情況下,一個group一個活躍的工作線程,達(dá)到充分利用CPU的目的。 thread_pool_stall_limit:用于timer線程定期檢查group是否“停滯”,參數(shù)表示檢測的間隔。 thread_pool_idle_timeout:當(dāng)一個worker空閑一段時間后會自動退出,保證線程池中的工作線程在滿足請求的情況下,保持比較低的水平。 thread_pool_oversubscribe:該參數(shù)用于控制CPU核心上“超頻”的線程數(shù)。這個參數(shù)設(shè)置值不含listen線程計(jì)數(shù)。 threadpool_high_prio_mode:表示優(yōu)先隊(duì)列的模式。

  線程池實(shí)現(xiàn)

  上面描述了Mysql-Server如何管理連接,這節(jié)重點(diǎn)描述線程池的實(shí)現(xiàn)框架,以及關(guān)鍵接口。如圖1

最新線程池介紹論文

  每一個綠色的方框代表一個group,group數(shù)目由thread_pool_size參數(shù)決定。每個group包含一個優(yōu)先隊(duì)列和普通隊(duì)列,包含一個listener線程和若干個工作線程,listener線程和worker線程可以動態(tài)轉(zhuǎn)換,worker線程數(shù)目由工作負(fù)載決定,同時受到thread_pool_oversubscribe設(shè)置影響。此外,整個線程池有一個timer線程監(jiān)控group,防止group“停滯”。

關(guān)鍵接口

  1. tp_add_connection[處理新連接]

  1) 創(chuàng)建一個connection對象

  2) 根據(jù)thread_id%group_count確定connection分配到哪個group

  3) 將connection放進(jìn)對應(yīng)group的隊(duì)列

  4) 如果當(dāng)前活躍線程數(shù)為0,則創(chuàng)建一個工作線程

  2. worker_main[工作線程]

  1) 調(diào)用get_event獲取請求

  2) 如果存在請求,則調(diào)用handle_event進(jìn)行處理

  3) 否則,表示隊(duì)列中已經(jīng)沒有請求,退出結(jié)束。

  3. get_event[獲取請求]

  1) 獲取一個連接請求

  2) 如果存在,則立即返回,結(jié)束

  3) 若此時group內(nèi)沒有l(wèi)istener,則線程轉(zhuǎn)換為listener線程,阻塞等待

  4) 若存在listener,則將線程加入等待隊(duì)列頭部

  5) 線程休眠指定的時間(thread_pool_idle_timeout)

  6) 如果依然沒有被喚醒,是超時,則線程結(jié)束,結(jié)束退出

  7) 否則,表示隊(duì)列里有連接請求到來,跳轉(zhuǎn)1

  備注:獲取連接請求前,會判斷當(dāng)前的活躍線程數(shù)是否超過了

  thread_pool_oversubscribe+1,若超過了,則將線程進(jìn)入休眠狀態(tài)。

  4. handle_event[處理請求]

  1) 判斷連接是否進(jìn)行登錄驗(yàn)證,若沒有,則進(jìn)行登錄驗(yàn)證

  2) 關(guān)聯(lián)thd實(shí)例信息

  3) 獲取網(wǎng)絡(luò)數(shù)據(jù)包,分析請求

  4) 調(diào)用do_command函數(shù)循環(huán)處理請求

  5) 獲取thd實(shí)例的套接字句柄,判斷句柄是否在epoll的監(jiān)聽列表中

  6) 若沒有,調(diào)用epoll_ctl進(jìn)行關(guān)聯(lián)

  7) 結(jié)束

  5.listener[監(jiān)聽線程]

  1) 調(diào)用epoll_wait進(jìn)行對group關(guān)聯(lián)的套接字監(jiān)聽,阻塞等待

  2) 若請求到來,從阻塞中恢復(fù)

  3) 根據(jù)連接的優(yōu)先級別,確定是放入普通隊(duì)列還是優(yōu)先隊(duì)列

  4) 判斷隊(duì)列中任務(wù)是否為空

  5) 若隊(duì)列為空,則listener轉(zhuǎn)換為worker線程

  6) 若group內(nèi)沒有活躍線程,則喚醒一個線程

  備注:這里epoll_wait監(jiān)聽group內(nèi)所有連接的套接字,然后將監(jiān)聽到的連接

  請求push到隊(duì)列,worker線程從隊(duì)列中獲取任務(wù),然后執(zhí)行。

  6. timer_thread[監(jiān)控線程]

  1) 若沒有l(wèi)istener線程,并且最近沒有io_event事件

  2) 則創(chuàng)建一個喚醒或創(chuàng)建一個工作線程

  3) 若group最近一段時間沒有處理請求,并且隊(duì)列里面有請求,則

  4) 表示group已經(jīng)stall,則喚醒或創(chuàng)建線程

  5)檢查是否有連接超時

  備注:timer線程通過調(diào)用check_stall判斷group是否處于stall狀態(tài),通過調(diào)用timeout_check檢查客戶端連接是否超時。

  7.tp_wait_begin[進(jìn)入等待狀態(tài)流程]

  1) active_thread_count減1,waiting_thread_count加1

  2)設(shè)置connection->waiting= true

  3) 若活躍線程數(shù)為0,并且任務(wù)隊(duì)列不為空,或者沒有監(jiān)聽線程,則

  4) 喚醒或創(chuàng)建一個線程

  8.tp_wait_end[結(jié)束等待狀態(tài)流程]

  1) 設(shè)置connection的waiting狀態(tài)為false

  2) active_thread_count加1,waiting_thread_count減1

  備注:

  1)waiting_threads這個list里面的線程是空閑線程,并非等待線程,所謂空閑線程是隨時可以處理任務(wù)的線程,而等待線程則是因?yàn)榈却i,或等待io操作等無法處理任務(wù)的線程。

  2)tp_wait_begin和tp_wait_end的主要作用是由于匯報狀態(tài),即使更新active_thread_count和waiting_thread_count的信息。

  9. tp_init/tp_end

  分別調(diào)用thread_group_init和thread_group_close來初始化和銷毀線程池


本文來源http://www.nvnqwx.com/shiyongwen/2351084.htm
以上內(nèi)容來自互聯(lián)網(wǎng),請自行判斷內(nèi)容的正確性。若本站收錄的信息無意侵犯了貴司版權(quán),請給我們來信(zaixianzuowenhezi@gmail.com),我們會及時處理和回復(fù),謝謝.
国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看
国产精品户外野外| 精品一区久久久| 天堂av在线中文| 国产一区喷水| 久久精品国产亚洲7777| 亚洲一区高清| 成人在线一区二区| 久久成人一区二区| 狠狠色综合一区二区| 日韩中文字幕国产精品| 日韩av免费一区| 91精品久久香蕉国产线看观看| 精品国产免费人成电影在线观...| 欧美激情第六页| 北条麻妃一区二区三区中文字幕| 日本一区二区在线视频观看| 91精品国产91久久久久久久久| 欧美激情在线观看视频| 国产视频精品网| 欧美wwwxxxx| 国产美女作爱全过程免费视频| 欧美成人精品在线播放| 国产三级精品在线不卡| 蜜月aⅴ免费一区二区三区| 国产欧美一区二区视频| 欧美激情亚洲精品| 成人精品水蜜桃| 亚洲精品中文综合第一页| 国产精品88a∨| 日本一区二区免费高清视频| 国产成人精品久久| 国产成人拍精品视频午夜网站| 日本不卡一二三区| www.亚洲免费视频| 欧美一级爱爱| 国产精品久久久久久av| 中文字幕久精品免| 91久久久久久久一区二区| 色999五月色| 国产成人精品视频在线| 国模精品视频一区二区| 欧美日韩国产123| 91精品国产综合久久久久久蜜臀 | 古典武侠综合av第一页| 欧美激情精品在线| 久久亚洲国产成人精品无码区| 性色av一区二区咪爱| 久久久久久尹人网香蕉| 国产专区一区二区三区| 亚洲一区二区三区免费看| 久久精品国产综合精品| 韩国成人一区| 亚洲欧洲免费无码| 偷拍盗摄高潮叫床对白清晰| 色天天综合狠狠色| 国产欧美精品一区二区| 午夜精品久久久久久久99热浪潮 | 亚洲精品久久区二区三区蜜桃臀| 国产福利视频在线播放 | 国产午夜福利视频在线观看| 午夜精品视频在线观看一区二区| 久久久久久久一区二区三区| 精品婷婷色一区二区三区蜜桃| 亚洲综合日韩在线| 国产成人欧美在线观看| 国产免费一区二区三区四在线播放 | 国产成人av网址| 免费在线国产精品| 亚洲砖区区免费| 久久精品国产69国产精品亚洲| 国产一区免费在线| 日本久久亚洲电影| 精品中文字幕在线观看| 久久精品人成| 国产欧美精品日韩| 欧美亚洲免费在线| 亚洲黄色一区二区三区| 国产精品久久久久久久久久| 91传媒免费视频| 国产亚洲福利社区| 日本视频一区二区不卡| 久久久久免费网| 成人精品久久久| 黄页网站在线观看视频| 亚洲成人第一| 久久这里只有精品99| 久久久久久这里只有精品| 北条麻妃在线视频观看| | 一区二区三区四区免费视频| 日韩三级成人av网| 91久久久久久久久久久久久| 国产一区二区中文字幕免费看| 亚洲精品国产精品久久| 欧美乱妇40p| 国产精品青青草| 久久久久久久久久久久久久久久av | 日韩有码在线视频| 91免费国产视频| 国产欧美在线播放| 国内精品视频一区| 欧洲在线视频一区| 日日摸天天爽天天爽视频| 欧美激情二区三区| 美女av一区二区三区| 国产精品爽黄69| 色av中文字幕一区| 国产精品com| 国产精品9999| 91精品国产综合久久香蕉最新版 | 国产精品无码电影在线观看| 国产黄视频在线| 99国产在线| 国产美女主播在线播放| 国内视频一区| 黄色免费观看视频网站| 日韩经典在线视频| 日韩福利一区二区三区| 亚洲精品日韩精品| 亚洲欧洲日夜超级视频| 亚洲一区二区三区午夜| 亚洲综合精品伊人久久| 亚洲一二区在线| 中文字幕中文字幕在线中一区高清| 久色乳综合思思在线视频| 国产精品成人播放| 精品久久久无码人妻字幂| 国产精品久久色| 精品国产aⅴ麻豆| 欧美日韩成人网| 亚洲综合成人婷婷小说| 亚洲在线观看视频网站| 一区二区国产日产| 午夜精品一区二区在线观看的| 亚洲人成网站在线观看播放| 午夜精品www| 日韩无套无码精品| 日韩欧美一区二区三区四区五区 | 日本一区二区三不卡| 青青青在线观看视频| 欧美亚洲国产日韩2020| 黄色激情在线视频| 国产日韩欧美综合精品| 国产免费视频传媒| 91精品久久久久久久久久久| 国产精品av网站| 久久国产精品 国产精品 | 高清一区二区三区四区五区| 亚洲一区久久久| 欧美一区二区激情| 人人做人人澡人人爽欧美| 欧美一区视频在线| 麻豆精品蜜桃一区二区三区| 国产九九精品视频| 国产欧美日韩91| 久久久综合免费视频| xxxx性欧美| 精品免费久久久久久久| 亚洲国产日韩综合一区| 日本精品免费在线观看| 黄黄视频在线观看| av动漫在线免费观看| 久久久影视精品| 久久色免费在线视频| 精品国产一区二区三区麻豆小说 | 97久久国产精品| 日韩在线视频网| 精品九九九九| 日本一区二区三区www| 精品午夜一区二区| 91国产美女视频| 久久精品免费电影| 亚洲综合色av| 黄色网页免费在线观看| 成人免费在线小视频| 久激情内射婷内射蜜桃| 精品产品国产在线不卡| 日本精品免费观看| 国产亚洲情侣一区二区无| 久久一区二区精品| 久久国产精品电影| 日本韩国在线不卡| 国产欧美日韩视频一区二区三区| 国产二区不卡| 中文字幕人妻熟女人妻洋洋 | 麻豆传媒一区二区| 久热免费在线观看| 国产精品视频精品| 午夜精品美女自拍福到在线| 国产中文一区二区| 久久久久日韩精品久久久男男| 在线一区高清| 好吊色欧美一区二区三区四区| 国产精品2018| 精品国产乱码一区二区三区四区| 日本aa在线观看| 国产精品一区二区你懂得| 国产精品手机视频| 日本不卡一区二区三区在线观看| 国产精品香蕉在线观看|