知识大全 MySQL数据库线程缓冲池详解

Posted

篇首语:健儿须快马,快马须健儿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 MySQL数据库线程缓冲池详解相关的知识,希望对你有一定的参考价值。

MySQL数据库线程缓冲池详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  MySQL数据库线程缓冲池的相关知识是本文我们主要要介绍的内容 MySQL数据库支持线程缓存 在多线程连接模式下 如果连接断开后 将这个线 程放入空闲线程缓冲区 在下次有连接到来时 先去缓冲池中查找是否有空闲线程 有则用之 无则创建 启动时可以设置线程缓冲池的数 目 Mysqld exe thread_cache_size=

  在一个连接断开时 会调用cache_thread函数 将空闲的线程加入到cache中 以备后用 源码如下

以下是代码片段 static bool cache_thread() safe_mutex_assert_owner(&LOCK_thread_count); if ( cached_thread_count < thread_cache_size && ! abort_loop && !kill_cached_threads) /* Don t kill the thread just put it in cache for reuse */ DBUG_PRINT("info" ("Adding thread to cache")); cached_thread_count++; while (!abort_loop && ! wake_thread && ! kill_cached_threads) (void) pthread_cond_wait(&COND_thread_cache &LOCK_thread_count); cached_thread_count ; if (kill_cached_threads) pthread_cond_signal(&COND_flush_thread_cache); if (wake_thread) THD *thd; wake_thread ; thd= thread_cache get(); thd >thread_stack= (char*) &thd; // For store_globals (void) thd >store_globals(); /* THD::mysys_var::abort is associated with physical thread rather than with THD object So we need to reset this flag before using this thread for handling of new THD object/connection */ thd >mysys_var >abort= ; thd >thr_create_utime= my_micro_time(); threads append(thd); return( ); return( );

  上面我们的启动参数设置线程缓冲区为 此时对应代码里面的thread_cache_size = cached_thread_count记录

  了此刻cache中的空闲线程数目 只有在cache未满的情况下 才会将新的空闲线程加入缓冲池中 加入到缓冲区其实就是将线

 

  程挂起 pthread_cond_wait函数便是线程等待函数 在此函数中 会调用WaitForMultipleObjects进行事件等待 具体源码

  如下

以下是代码片段 int pthread_cond_timedwait(pthread_cond_t *cond pthread_mutex_t *mutex struct timespec *abstime) int result; long timeout; union ft now; if( abstime != NULL ) GetSystemTimeAsFileTime(&now ft); /* Calculate time left to abstime subtract start time from current time(values are in ns units) convert to millisec by dividing with */ timeout= (long)((abstime >tv i now i ) / ); /* Don t allow the timeout to be negative */ if (timeout < ) timeout= L; /* Make sure the calucated timeout does not exceed original timeout value which could cause "wait for ever" if system time changes */ if (timeout > abstime >max_timeout_msec) timeout= abstime >max_timeout_msec; else /* No time specified; don t expire */ timeout= INFINITE; /* Block access if previous broadcast hasn t finished This is just for safety and should normally not affect the total time spent in this function */ WaitForSingleObject(cond >broadcast_block_event INFINITE); EnterCriticalSection(&cond >lock_waiting); cond >waiting++; LeaveCriticalSection(&cond >lock_waiting); LeaveCriticalSection(mutex); result= WaitForMultipleObjects( cond >events FALSE timeout); EnterCriticalSection(&cond >lock_waiting); cond >waiting ; if (cond >waiting == ) /* We re the last waiter to be notified or to stop waiting so reset the manual event */ /* Close broadcast gate */ ResetEvent(cond >events[BROADCAST]); /* Open block gate */ SetEvent(cond >broadcast_block_event); LeaveCriticalSection(&cond >lock_waiting); EnterCriticalSection(mutex); return result == WAIT_TIMEOUT ? ETIMEDOUT : ;

  此处是等待时间 何处进行事件通知呢?我们再次来到上篇所提及的为新的连接创建线程的代码中

以下是代码片段 void create_thread_to_handle_connection(THD *thd) if (cached_thread_count > wake_thread) /* Get thread from cache */ thread_cache append(thd); wake_thread++; pthread_cond_signal(&COND_thread_cache); Else   cha138/Article/program/MySQL/201311/29579

相关参考

知识大全 数据库学习:MySQL Join详解

数据库学习:MySQLJoin详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  还是先Crea

知识大全 详解MySQL数据库提升性能的八种方法[2]

详解MySQL数据库提升性能的八种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用

知识大全 详解MySQL数据库提升性能的八种方法[1]

详解MySQL数据库提升性能的八种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选取

知识大全 MySQL的数据类型和建库策略详解

MySQL的数据类型和建库策略详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  无论是在小得可

知识大全 jboss配置 mysql数据库连接池

jboss配置 mysql数据库连接池实例 :配置:   JDK    JBoss  &n

知识大全 Tomcat下配置MySQL数据库连接池

Tomcat下配置MySQL数据库连接池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在$CA

知识大全 spring连接池配置详解

  数据库连接池概述  数据库连接是一种关键的有限的昂贵的资源这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性影响到程序的性能指标数据库连接池正是

知识大全 Tomcat5配置Mysql JDBC数据库连接池

Tomcat5配置MysqlJDBC数据库连接池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 浅析Tomcat5配置Mysql JDBC数据库连接池

浅析Tomcat5配置MysqlJDBC数据库连接池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 tomcat连接池的配置与使用数据库mysql

    关于tomcat连接池的配置我在自己开始的时候碰到过许多的问题至少失败过六次今天终于成功了对于这个问题的产生与由来我也给大伙说说