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

歡迎來到010在線作文網!

最新線程池介紹論文

實用文 時間:2021-08-31 手機版

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

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

調度方式實現

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

  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監聽mysql端口的連接請求

  收到連接后,調用accept接口,創建通信socket

  初始化thd實例,vio對象等

  根據thread_handling方式設置,初始化thd實例的scheduler函數指針

  調用scheduler特定的add_connection函數新建連接

  下面代碼展示了scheduler_functions模板和線程池對模板回調函數的實現,這個是多種連接管理的核心。

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

線程池的相關參數

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

  線程池實現

  上面描述了Mysql-Server如何管理連接,這節重點描述線程池的實現框架,以及關鍵接口。如圖1

最新線程池介紹論文

  每一個綠色的方框代表一個group,group數目由thread_pool_size參數決定。每個group包含一個優先隊列和普通隊列,包含一個listener線程和若干個工作線程,listener線程和worker線程可以動態轉換,worker線程數目由工作負載決定,同時受到thread_pool_oversubscribe設置影響。此外,整個線程池有一個timer線程監控group,防止group“停滯”。

關鍵接口

  1. tp_add_connection[處理新連接]

  1) 創建一個connection對象

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

  3) 將connection放進對應group的隊列

  4) 如果當前活躍線程數為0,則創建一個工作線程

  2. worker_main[工作線程]

  1) 調用get_event獲取請求

  2) 如果存在請求,則調用handle_event進行處理

  3) 否則,表示隊列中已經沒有請求,退出結束。

  3. get_event[獲取請求]

  1) 獲取一個連接請求

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

  3) 若此時group內沒有listener,則線程轉換為listener線程,阻塞等待

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

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

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

  7) 否則,表示隊列里有連接請求到來,跳轉1

  備注:獲取連接請求前,會判斷當前的活躍線程數是否超過了

  thread_pool_oversubscribe+1,若超過了,則將線程進入休眠狀態。

  4. handle_event[處理請求]

  1) 判斷連接是否進行登錄驗證,若沒有,則進行登錄驗證

  2) 關聯thd實例信息

  3) 獲取網絡數據包,分析請求

  4) 調用do_command函數循環處理請求

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

  6) 若沒有,調用epoll_ctl進行關聯

  7) 結束

  5.listener[監聽線程]

  1) 調用epoll_wait進行對group關聯的套接字監聽,阻塞等待

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

  3) 根據連接的優先級別,確定是放入普通隊列還是優先隊列

  4) 判斷隊列中任務是否為空

  5) 若隊列為空,則listener轉換為worker線程

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

  備注:這里epoll_wait監聽group內所有連接的套接字,然后將監聽到的連接

  請求push到隊列,worker線程從隊列中獲取任務,然后執行。

  6. timer_thread[監控線程]

  1) 若沒有listener線程,并且最近沒有io_event事件

  2) 則創建一個喚醒或創建一個工作線程

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

  4) 表示group已經stall,則喚醒或創建線程

  5)檢查是否有連接超時

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

  7.tp_wait_begin[進入等待狀態流程]

  1) active_thread_count減1,waiting_thread_count加1

  2)設置connection->waiting= true

  3) 若活躍線程數為0,并且任務隊列不為空,或者沒有監聽線程,則

  4) 喚醒或創建一個線程

  8.tp_wait_end[結束等待狀態流程]

  1) 設置connection的waiting狀態為false

  2) active_thread_count加1,waiting_thread_count減1

  備注:

  1)waiting_threads這個list里面的線程是空閑線程,并非等待線程,所謂空閑線程是隨時可以處理任務的線程,而等待線程則是因為等待鎖,或等待io操作等無法處理任務的線程。

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

  9. tp_init/tp_end

  分別調用thread_group_init和thread_group_close來初始化和銷毀線程池


本文來源http://www.nvnqwx.com/shiyongwen/2351084.htm
以上內容來自互聯網,請自行判斷內容的正確性。若本站收錄的信息無意侵犯了貴司版權,請給我們來信(zaixianzuowenhezi@gmail.com),我們會及時處理和回復,謝謝.
国产精品尤物福利片在线观看_少妇免费毛片久久久久久久久_久久久久成人精品免费播放动漫_日韩av综合在线观看
岛国视频一区| 日韩免费毛片视频| 欧美黄色直播| 日韩一级免费看| 色播亚洲婷婷| 日本久久久久久久久久久| 国产美女精品久久久| 日韩av在线一区二区三区| 日韩免费中文专区| 99久久精品无码一区二区毛片 | 欧美精品在欧美一区二区| 久久久一本二本三本| 91精品国产91久久久久福利| 久久欧美在线电影| 中文字幕一区二区三区有限公司| 在线视频精品一区| 亚洲一区中文字幕| 日本视频一区二区在线观看| 成人免费毛片在线观看| 激情六月丁香婷婷| 国产老熟妇精品观看| 国产精品免费入口| 精品国产乱码久久久久久蜜柚 | 亚洲成熟丰满熟妇高潮xxxxx| 亚洲www在线| 国产精品一区二区三区在线| 国产精品久久久久久久久久东京| 欧美成年人视频网站| 亚洲影院色在线观看免费| 国产欧美 在线欧美| 九九热这里只有精品免费看| 国产亚洲欧美一区二区| 高清不卡日本v二区在线| 欧美成aaa人片免费看| 国产日韩欧美夫妻视频在线观看| 久久久成人精品视频| 欧美精品第一页在线播放| 国产日产精品一区二区三区四区 | 国产精品三级久久久久久电影 | 国产毛片视频网站| 欧美精品www| 日韩国产欧美一区| 久久久久久亚洲精品不卡| 国产精品久久99久久| 久久成人这里只有精品| 精品欧美日韩| 精品久久久久久中文字幕动漫| 国产视频一区二区视频| 一区二区三区四区欧美日韩| av片在线免费| 日产国产精品精品a∨| 精品久久国产精品| 伊人天天久久大香线蕉av色| 北条麻妃在线视频观看| 欧美一级片一区| 久久精品这里热有精品| 国产一区二区三区播放| 亚洲影院污污.| 日韩在线激情视频| 欧美一区二区视频97| 久久久久久久久久久久久久一区| 欧美xxxx黑人又粗又长密月| 精品国产一区二区三区无码| 国产精品91在线观看| 精品免费国产一区二区| 国产欧美精品日韩| 欧美一区二区三区四区夜夜大片| 国产成a人亚洲精v品在线观看| 九九热r在线视频精品| 97久久精品午夜一区二区| 国产精品美女久久久久av福利| 国产日韩在线视频| 亚洲女人毛片| 国产精品久久中文| 91精品国产91久久久久久吃药 | 91精品国产乱码久久久久久蜜臀| 欧美在线一二三区| 久久九九视频| 一本久道中文无码字幕av| 国产xxxx振车| 国产视色精品亚洲一区二区| 亚洲精品免费在线看| 日韩中文字幕在线精品| 丰满爆乳一区二区三区| 奇米一区二区三区四区久久| 欧美巨大黑人极品精男| 欧美xxxx黑人又粗又长精品| 亚洲欧美日韩精品综合在线观看 | 亚洲高清视频一区二区| 国产精品爽爽爽| 911国产网站尤物在线观看| 日韩精品极品视频在线观看免费| 精品国产一二| 国产超级av在线| 波多野结衣久草一区| 国模一区二区三区私拍视频| 精品国产一区久久久| 国产精品一区二区你懂得| 欧美怡红院视频一区二区三区| www.色综合| 91av在线网站| 国产精品一区二区免费| 黄色动漫网站入口| 日韩美女免费线视频| 亚洲**2019国产| 久久久久久国产精品久久| 国产精品久久久久免费a∨| 国产黑人绿帽在线第一区| 国产青草视频在线观看| 秋霞毛片久久久久久久久| 亚洲mm色国产网站| 欧美激情精品久久久久| 国产精品高清在线| 久久视频在线观看免费| www.99久久热国产日韩欧美.com| 久久久久高清| 99色这里只有精品| 成人精品一区二区三区电影黑人| 国产色婷婷国产综合在线理论片a| 欧美中文字幕在线视频| 日韩国产欧美精品| 日韩欧美在线播放视频| 日本精品va在线观看| 亚洲精品影院| 亚洲欧洲日韩综合二区| 亚洲精品在线观看免费| 亚洲高清123| 亚洲精品天堂成人片av在线播放| 中文字幕日韩一区二区三区| 欧美激情精品久久久久久久变态| 国产精品福利在线观看| 久久久国产精彩视频美女艺术照福利| 久久久久五月天| 国产成人a亚洲精品| 99久热re在线精品996热视频| 北条麻妃在线视频观看| 国产资源在线视频| 久久躁日日躁aaaaxxxx| 国产福利精品在线| 国内精品久久久| 欧美日韩喷水| 欧美少妇在线观看| 热门国产精品亚洲第一区在线| 日本久久精品视频| 日本精品一区二区三区视频 | 成人久久久久久久| 国产伦精品一区二区三区视频黑人 | 一区二区三区不卡在线| 另类色图亚洲色图| 国产精品久久久久99| 国产精品美女xx| 国产成人啪精品视频免费网| 欧美一乱一性一交一视频| 日韩中文在线字幕| 欧美性视频在线| 欧美精品123| 黄页免费在线观看视频| 狠狠干 狠狠操| 国产在线拍偷自揄拍精品| 国产欧美中文字幕| 99在线高清视频在线播放| 99精彩视频在线观看免费| 国产精品有限公司| 成人免费观看视频在线观看| 国产美女无遮挡网站| 丰满人妻中伦妇伦精品app| 99电影在线观看| 国产精品一区久久| 在线观看成人av| 精品一区2区三区| 精品人妻少妇一区二区| 北条麻妃av高潮尖叫在线观看| 国产肉体ⅹxxx137大胆| 国产日本欧美一区二区三区在线| 宅男在线精品国产免费观看| 亚洲视频小说| 奇米成人av国产一区二区三区| 国产一区自拍视频| 国产成人一区二区三区免费看| 9a蜜桃久久久久久免费| 欧美乱人伦中文字幕在线| 日本一级淫片演员| 欧洲一区二区在线| 欧美亚洲一二三区| 久久久久久久国产精品视频| 久久免费在线观看| 国产精品视频一区二区三区经 | 成年丰满熟妇午夜免费视频| 成人久久18免费网站漫画| 国产精品午夜一区二区欲梦| 91精品国产高清自在线| 国产传媒一区| 国产精品久久久久久久久粉嫩av| 欧美激情精品久久久久久久变态 | 免费看a级黄色片| 91麻豆桃色免费看| 国产精品免费小视频| 亚洲制服欧美久久| 日韩欧美视频一区二区三区四区| 国产在线视频在线|