IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MYSQL → MySQL數(shù)據(jù)庫線程緩沖池詳解

MySQL數(shù)據(jù)庫線程緩沖池詳解

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

MySQL數(shù)據(jù)庫線程緩沖池的相關(guān)知識(shí)是本文我們主要要介紹的內(nèi)容,MySQL數(shù)據(jù)庫支持線程緩存,在多線程連接模式下,如果連接斷開后,將這個(gè)線程放入空閑線程緩沖區(qū),在下次有連接到來時(shí),先去緩沖池中查找是否有空閑線程,有則用之,無則創(chuàng)建。啟動(dòng)時(shí)可以設(shè)置線程緩沖池的數(shù)目:Mysqld.exe --thread_cache_size=10。

在一個(gè)連接斷開時(shí),會(huì)調(diào)用cache_thread函數(shù),將空閑的線程加入到cache中,以備后用。源碼如下:

  1. static?bool?cache_thread() ?
  2. { ?
  3. safe_mutex_assert_owner(&LOCK_thread_count); ?
  4. if?( ?
  5. cached_thread_count?<?thread_cache_size?
  6. && ?
  7. !?abort_loop?&&?!kill_cached_threads) ?
  8. { ?
  9. /*?Don't?kill?the?thread,?just?put?it?in?cache?for?reuse?*/ ?
  10. DBUG_PRINT("info",?("Adding?thread?to?cache")); ?
  11. cached_thread_count++; ?
  12. while?(!abort_loop?&&?!?wake_thread?&&?!?kill_cached_threads) ?
  13. (void)?pthread_cond_wait(&COND_thread_cache,?&LOCK_thread_count); ?
  14. cached_thread_count--; ?
  15. if?(kill_cached_threads) ?
  16. pthread_cond_signal(&COND_flush_thread_cache); ?
  17. if?(wake_thread) ?
  18. { ?
  19. THD?*thd; ?
  20. wake_thread--; ?
  21. thd=?thread_cache.get(); ?
  22. thd->thread_stack=?(char*)?&thd;????//?For?store_globals ?
  23. (void)?thd->store_globals(); ?
  24. /* ?
  25. THD::mysys_var::abort?is?associated?with?physical?thread?rather ?
  26. than?with?THD?object.?So?we?need?to?reset?this?flag?before?using ?
  27. this?thread?for?handling?of?new?THD?object/connection. ?
  28. */ ?
  29. thd->mysys_var->abort=?0; ?
  30. thd->thr_create_utime=?my_micro_time(); ?
  31. threads.append(thd); ?
  32. return(1); ?
  33. } ?
  34. } ?
  35. return(0); ?
  36. }?

上面我們的啟動(dòng)參數(shù)設(shè)置線程緩沖區(qū)為10,此時(shí)對應(yīng)代碼里面的thread_cache_size = 10,cached_thread_count記錄

了此刻cache中的空閑線程數(shù)目,只有在cache未滿的情況下,才會(huì)將新的空閑線程加入緩沖池中。加入到緩沖區(qū)其實(shí)就是將線

程掛起,pthread_cond_wait函數(shù)便是線程等待函數(shù),在此函數(shù)中,會(huì)調(diào)用WaitForMultipleObjects進(jìn)行事件等待。具體源碼

如下:

  1. int?pthread_cond_timedwait(pthread_cond_t?*cond,?pthread_mutex_t?*mutex, ?
  2. struct?timespec?*abstime) ?
  3. int?result; ?
  4. long?timeout;? ?
  5. union?ft64?now; ?
  6. if(?abstime?!=?NULL?) ?
  7. { ?
  8. GetSystemTimeAsFileTime(&now.ft); ?
  9. /* ?
  10. Calculate?time?left?to?abstime ?
  11. -?subtract?start?time?from?current?time(values?are?in?100ns?units) ?
  12. -?convert?to?millisec?by?dividing?with?10000 ?
  13. */ ?
  14. timeout=?(long)((abstime->tv.i64?-?now.i64)?/?10000); ?
  15. /*?Don't?allow?the?timeout?to?be?negative?*/ ?
  16. if?(timeout?<?0) ?
  17. timeout=?0L; ?
  18. /* ?
  19. Make?sure?the?calucated?timeout?does?not?exceed?original?timeout ?
  20. value?which?could?cause?"wait?for?ever"?if?system?time?changes ?
  21. */ ?
  22. if?(timeout?>?abstime->max_timeout_msec) ?
  23. timeout=?abstime->max_timeout_msec; ?
  24. } ?
  25. else ?
  26. { ?
  27. /*?No?time?specified;?don't?expire?*/ ?
  28. timeout=?INFINITE; ?
  29. } ?
  30. /*? ?
  31. Block?access?if?previous?broadcast?hasn't?finished. ?
  32. This?is

    關(guān)鍵詞標(biāo)簽:MySQL,數(shù)據(jù)庫

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Xbox Game Pass Xbox Game Pass 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)

相關(guān)下載

人氣排行 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯(cuò)誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無法啟動(dòng)、無法停止各種解決方法總結(jié) 三種常用的MySQL建表語句