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

歡迎來(lái)到010在線(xiàn)作文網(wǎng)!

最新線(xiàn)程池介紹論文

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

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

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

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

  Mysql-Server同時(shí)支持3種連接管理方式,包括No-Threads,One-Thread-Per-Connection和Pool-Threads。No-Threads表示處理連接使用主線(xiàn)程處理,不額外創(chuàng)建線(xiàn)程,這種方式主要用于調(diào)試;One-Thread-Per-Connection是線(xiàn)程池出現(xiàn)以前最常用的方式,為每一個(gè)連接創(chuàng)建一個(gè)線(xiàn)程服務(wù);Pool-Threads則是本文所討論的線(xiàn)程池方式。Mysql-Server通過(guò)一組函數(shù)指針來(lái)同時(shí)支持3種連接管理方式,對(duì)于特定的方式,將函數(shù)指針設(shè)置成特定的回調(diào)函數(shù),連接管理方式通過(guò)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);

  連接管理流程

  通過(guò)poll監(jiān)聽(tīng)mysql端口的連接請(qǐng)求

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

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

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

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

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

  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 };

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

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

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

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

最新線(xiàn)程池介紹論文

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

關(guān)鍵接口

  1. tp_add_connection[處理新連接]

  1) 創(chuàng)建一個(gè)connection對(duì)象

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

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

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

  2. worker_main[工作線(xiàn)程]

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

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

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

  3. get_event[獲取請(qǐng)求]

  1) 獲取一個(gè)連接請(qǐng)求

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

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

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

  5) 線(xiàn)程休眠指定的時(shí)間(thread_pool_idle_timeout)

  6) 如果依然沒(méi)有被喚醒,是超時(shí),則線(xiàn)程結(jié)束,結(jié)束退出

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

  備注:獲取連接請(qǐng)求前,會(huì)判斷當(dāng)前的活躍線(xiàn)程數(shù)是否超過(guò)了

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

  4. handle_event[處理請(qǐng)求]

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

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

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

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

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

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

  7) 結(jié)束

  5.listener[監(jiān)聽(tīng)線(xiàn)程]

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

  2) 若請(qǐng)求到來(lái),從阻塞中恢復(fù)

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

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

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

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

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

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

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

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

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

  3) 若group最近一段時(shí)間沒(méi)有處理請(qǐng)求,并且隊(duì)列里面有請(qǐng)求,則

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

  5)檢查是否有連接超時(shí)

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

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

  1) active_thread_count減1,waiting_thread_count加1

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

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

  4) 喚醒或創(chuàng)建一個(gè)線(xiàn)程

  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這個(gè)list里面的線(xiàn)程是空閑線(xiàn)程,并非等待線(xiàn)程,所謂空閑線(xiàn)程是隨時(shí)可以處理任務(wù)的線(xiàn)程,而等待線(xiàn)程則是因?yàn)榈却i,或等待io操作等無(wú)法處理任務(wù)的線(xiàn)程。

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

  9. tp_init/tp_end

  分別調(diào)用thread_group_init和thread_group_close來(lái)初始化和銷(xiāo)毀線(xiàn)程池


本文來(lái)源http://www.nvnqwx.com/shiyongwen/2351084.htm
以上內(nèi)容來(lái)自互聯(lián)網(wǎng),請(qǐng)自行判斷內(nèi)容的正確性。若本站收錄的信息無(wú)意侵犯了貴司版權(quán),請(qǐng)給我們來(lái)信(zaixianzuowenhezi@gmail.com),我們會(huì)及時(shí)處理和回復(fù),謝謝.
国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看
国产乱码精品一区二区三区卡| 视频一区二区精品| 欧美黄色直播| 亚洲一区 在线播放| 久久超碰亚洲| 麻豆中文字幕在线观看| 亚洲一区尤物| 国产精品视频免费观看| 国产精品97在线| 黄色一级二级三级| 大波视频国产精品久久| 国产精品久久久久久久天堂第1集| 逼特逼视频在线| 欧美日韩国产综合视频在线| 一区二区国产日产| 国产精品久久久久久婷婷天堂| 99免费在线观看视频| 黄色www在线观看| 日韩av在线播放不卡| 欧美精品久久久久a| 久久精品视频99| 97久久伊人激情网| 国产日韩在线观看av| 欧美日韩视频免费| 日本中文字幕在线视频观看| 一区二区精品在线| 欧美乱大交xxxxx| 久久久精品国产亚洲| 久久视频免费在线| 国产精品亚洲欧美导航| 免费观看美女裸体网站| 青青在线免费视频| 色香蕉在线观看| 亚洲午夜精品久久久久久人妖| 久久亚洲国产精品成人av秋霞| 日韩在线视频播放| 91精品免费久久久久久久久| 国产精选一区二区| 国产偷人视频免费| 蜜臀精品一区二区| 精品欧美一区二区三区久久久| 日本久久久网站| 水蜜桃亚洲一二三四在线| 亚洲伊人第一页| 在线观看福利一区| 欧美激情一区二区三级高清视频 | 欧美中文在线观看国产| 少妇人妻无码专区视频| 最新av网址在线观看| 欧美日韩不卡合集视频| 蜜臀久久99精品久久久无需会员| 欧美成年人视频网站| 欧美成年人网站| 久久中文精品视频| 欧美精品在线免费| 久精品免费视频| 欧美日韩成人网| 一区二区三区在线观看www| 欧美日韩成人在线观看| 精品久久久久久一区二区里番| 国产精品精品软件视频| 久久综合网hezyo| 精品久久久久久久久久中文字幕 | 亚洲综合在线小说| 亚洲一区二区三区香蕉| 亚洲国产精品女人| 亚洲精品一卡二卡三卡四卡| 午夜精品99久久免费| 日本一区视频在线| 日韩黄色片在线| 欧美专区第一页| 国内偷自视频区视频综合| 国产日韩在线精品av| 国产精选久久久久久| 成人羞羞国产免费| 91久久久一线二线三线品牌| 91精品久久久久久久久中文字幕| 久久这里只有精品18| 久久久久久午夜| 国产精品视频一区二区三区四区五区 | 亚洲精品自在在线观看| 性欧美激情精品| 日韩精品伦理第一区| 欧美日韩一区二| 国产天堂视频在线观看| 成人久久久久久| 91精品国产自产在线| 九一免费在线观看| 国产精品久久久久久久久粉嫩av| 欧美黄网免费在线观看| 欧美一区二区视频在线| 日韩精品在线视频免费观看| 免费av在线一区二区| αv一区二区三区| 国产成人极品视频| 国产精品免费观看在线| 一区二区不卡视频| 日韩精品欧美一区二区三区| 韩国成人一区| 99久热re在线精品996热视频| 久久久久久久久中文字幕| 国产精品精品国产| 亚洲精品中文综合第一页| 欧美在线亚洲一区| 国产乱码一区| 久草精品电影| 欧美激情视频一区| 日韩久久不卡| 国产日韩二区| 国产成人av影视| 萌白酱国产一区二区| 日韩区国产区| 国产精品一区二区三区不卡| 久久久久天天天天| 欧美激情乱人伦一区| 日韩欧美视频网站| 国产免费内射又粗又爽密桃视频| 国产不卡一区二区在线播放| 久久91精品国产91久久久| 日本精品视频网站| 国产精品影院在线观看| 色婷婷av一区二区三区在线观看 | 国产精品手机播放| 亚洲va码欧洲m码| 狠狠精品干练久久久无码中文字幕| 99久re热视频这里只有精品6| 久久久久久香蕉网| 一区二区三区视频| 精品91一区二区三区| 国产成人av在线| 中文网丁香综合网| 黄色片免费在线观看视频| 久久久无码中文字幕久...| 国产精品激情自拍| 日韩免费在线视频| 久久综合精品一区| 欧美日韩福利视频| 女女同性女同一区二区三区91| 91成人福利在线| 欧美激情久久久久| 黄网站色视频免费观看| 久久精品二区| 亚洲精品电影在线一区| 国产女人水真多18毛片18精品| 日韩专区中文字幕| 天堂v在线视频| 91免费视频网站在线观看| 欧美激情第三页| 国产尤物91| 国产精品爽爽ⅴa在线观看| 日韩av在线综合| 久久影院理伦片| 亚洲不卡中文字幕无码| av一区二区三区在线观看| 九九九热精品免费视频观看网站| 精品99在线视频| 精品国内亚洲在观看18黄| 日本久久久久久久久| 久久天天狠狠| 色乱码一区二区三在线看| 91精品综合久久| 亚洲精品欧洲精品| 91久久大香伊蕉在人线| 亚洲欧美国产精品桃花| 99久久免费观看| 亚洲一区美女视频在线观看免费| 国产日韩欧美在线观看| 久久综合久中文字幕青草| 国内一区在线| 国产精品欧美激情| 男人舔女人下面高潮视频| 日韩在线视频免费观看| 日本不卡久久| 久久久久久久av| 欧美又粗又长又爽做受| 国产成人免费av电影| 欧美精品成人网| 国产精品久久中文| 黄色免费视频大全| 国产精品极品在线| 国产综合精品一区二区三区| 国产精品高清在线| 国产综合在线观看视频| 久久国产精品久久精品| 国产麻豆日韩| 亚洲三区在线| 91精品久久久久久久| 日韩在线国产| 久久久久久久久久久久久国产 | 99久久精品无码一区二区毛片 | 精品久久精品久久| 风间由美一区二区三区| 亚洲综合在线中文字幕| 91精品成人久久| 日本一区二区三区四区五区六区 | 国产九九九九九| 亚洲欧美丝袜| 久久久久免费看黄a片app| 免费在线观看的毛片| 国产99久久久欧美黑人|