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

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)MYSQL → MySQL數(shù)據(jù)庫(kù)創(chuàng)建線程

MySQL數(shù)據(jù)庫(kù)創(chuàng)建線程

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

MySQL數(shù)據(jù)庫(kù)創(chuàng)建線程的相關(guān)操作是本文我們主要要介紹的內(nèi)容,MySQL數(shù)據(jù)庫(kù)中,為了提高系統(tǒng)效率,減少頻繁創(chuàng)建線程和中止線程的系統(tǒng)消耗,MySQL使用了線程緩沖區(qū)的概念,即如果一個(gè)連接斷開(kāi),則并不銷(xiāo)毀承載其的線程,而是將此線程放入線程緩沖區(qū),并處于掛起狀態(tài),當(dāng)下一個(gè)新的Connection到來(lái)時(shí),首先去線程緩沖區(qū)去查找是否有空閑的線程,如果有,則使用之,如果沒(méi)有則新建線程。

1.線程創(chuàng)建函數(shù)

大家知道,Mysql現(xiàn)在是插件式的存儲(chǔ)引擎,只要實(shí)現(xiàn)規(guī)定的接口,就可實(shí)現(xiàn)自己的存儲(chǔ)引擎。故Mysql的線程創(chuàng)建除了出現(xiàn)在主服務(wù)器框架外,存儲(chǔ)引擎也可能會(huì)進(jìn)行線程的創(chuàng)建。通過(guò)設(shè)置斷點(diǎn),在我調(diào)試的版本中,發(fā)現(xiàn)了兩個(gè)創(chuàng)建線程的函數(shù)。

pthread_create:Mysql自用的創(chuàng)建線程函數(shù)

os_thread_create:存儲(chǔ)引擎innobase的創(chuàng)建線程的函數(shù)

os_thread_create是存儲(chǔ)引擎innobase的線程函數(shù),先擱淺不研究了,重點(diǎn)看下pthread_create,首先看下其源碼。

  1. int?pthread_create(pthread_t?*thread_id,?pthread_attr_t?*attr, ?
  2. pthread_handler?func,?void?*param) ?
  3. { ?
  4. HANDLE?hThread; ?
  5. struct?pthread_map?*map; ?
  6. DBUG_ENTER("pthread_create"); ?
  7. if?(!(map=malloc(sizeof(*map)))) ?
  8. DBUG_RETURN(-1); ?
  9. map->funcfunc=func;?map->paramparam=param; ?
  10. pthread_mutex_lock(&THR_LOCK_thread); ?
  11. #ifdef?__BORLANDC__ ?
  12. hThread=(HANDLE)_beginthread((void(_USERENTRY?*)(void?*))?pthread_start, ?
  13. attr->dwStackSize???attr->dwStackSize?: ?
  14. 65535,?(void*)?map); ?
  15. #else ?
  16. hThread=(HANDLE)_beginthread((void(?__cdecl?*)(void?*))?pthread_start,?attr->dwStackSize???attr->dwStackSize?:?65535,?(void*)?map); ?
  17. #endif ?
  18. DBUG_PRINT("info",?("hThread=%lu",(long)?hThread)); ?
  19. *thread_id=map->pthreadself=hThread; ?
  20. pthread_mutex_unlock(&THR_LOCK_thread); ?
  21. if?(hThread?==?(HANDLE)?-1) ?
  22. { ?
  23. int?error=errno; ?
  24. DBUG_PRINT("error", ?
  25. ("Can't?create?thread?to?handle?request?(error?%d)",error)); ?
  26. DBUG_RETURN(error???error?:?-1); ?
  27. } ?
  28. VOID(SetThreadPriority(hThread,?attr->priority))?; ?
  29. DBUG_RETURN(0); ?
  30. }?

上面代碼首先構(gòu)造了一個(gè)map結(jié)構(gòu)體,成員分別是函數(shù)地址和傳入?yún)?shù)。然后調(diào)用操作系統(tǒng)的接口,_beginthread,但是執(zhí)行函數(shù)并不是傳入的函數(shù)——func,而是pthread_start,參數(shù)為map。繼續(xù)跟蹤pthread_start。

  1. pthread_handler_t?pthread_start(void?*param) ?
  2. { ?
  3. pthread_handler ?
  4. func=((struct?pthread_map?*)?param)->func ?
  5. void?*func_param=((struct?pthread_map?*)?param)->param; ?
  6. my_thread_init();???/*?Will?always?succeed?in?windows?*/ ?
  7. pthread_mutex_lock(&THR_LOCK_thread);???/*?Wait?for?beginthread?to?return?*/ ?
  8. win_pthread_self=((struct?pthread_map?*)?param)->pthreadself; ?
  9. pthread_mutex_unlock(&THR_LOCK_thread); ?
  10. free((char*)?param);/*?Free?param?from?create?*/ ?
  11. pthread_exit((void*)?(*func)(func_param)); ?
  12. return?0;???/*?Safety?*/ ?
  13. }?

可以看出,pthread_start中調(diào)用了map的func元素,作為真正執(zhí)行的函數(shù)體。OK,創(chuàng)建線程的函數(shù)跟蹤到此!

2.服務(wù)器啟動(dòng)時(shí)創(chuàng)建了哪些函數(shù)?

通過(guò)在兩個(gè)創(chuàng)建線程的地方設(shè)置斷點(diǎn),總結(jié)了下,在服務(wù)器啟動(dòng)時(shí),創(chuàng)建了如下的線程。

pthread_create創(chuàng)建的線程:

創(chuàng)建線程函數(shù)線程執(zhí)行函數(shù)

create_shutdown_thread

handle_shutdown

start_handle_manager

handle_manager

handle_connections_method

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

相關(guān)閱讀

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

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

相關(guān)下載

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

  • <tbody id="ho4ht"></tbody>