mysql源码---核心类 (1)线程类

线程是mysql一个很重要的概念。线程用来处理来自客户端的连接,线程和连接是1:1的关。线程和THD对象也是1:1对应的关系,有些线程会被设置为优先,而有些线程没有优先级,而线程的优先级设置在sql/mysql_priv.h

#define INTERRUPT_PRIOR -2

#define CONNECT_PRIOR -1

#define WAIT_PRIOR 0

#define QUERY_PRIOR 2

(THD是mysql线程描述符类)

线程初始化工作:

void THD::init(void)

{

pthread_mutex_lock(&LOCK_global_system_variables);

plugin_thdvar_init(this);

variables.time_format= date_time_format_copy((THD*) 0,

variables.time_format);

variables.date_format= date_time_format_copy((THD*) 0,

variables.date_format);

variables.datetime_format= date_time_format_copy((THD*) 0,

variables.datetime_format);

/*

variables= global_system_variables above has reset

variables.pseudo_thread_id to 0. We need to correct it here to

avoid temporary tables replication failure.

*/

variables.pseudo_thread_id= thread_id;

pthread_mutex_unlock(&LOCK_global_system_variables);

server_status= SERVER_STATUS_AUTOCOMMIT;

if (variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)

server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;

options= thd_startup_options;

if (variables.max_join_size == HA_POS_ERROR)

options |= OPTION_BIG_SELECTS;

else

options &= ~OPTION_BIG_SELECTS;

transaction.all.modified_non_trans_table= transaction.stmt.modified_non_trans_table= FALSE;

open_options=ha_open_options;

update_lock_default= (variables.low_priority_updates ?

TL_WRITE_LOW_PRIORITY :

TL_WRITE);

session_tx_isolation= (enum_tx_isolation) variables.tx_isolation;

update_charset();

reset_current_stmt_binlog_row_based();

bzero((char *) &status_var, sizeof(status_var));

sql_log_bin_toplevel= options & OPTION_BIN_LOG;

#if defined(ENABLED_DEBUG_SYNC)

/* Initialize the Debug Sync Facility. See debug_sync.cc. */

debug_sync_init_thread(this);

#endif /* defined(ENABLED_DEBUG_SYNC) */

}

还有一些cleanup等函数,走在该文件中实现

时间: 2024-10-15 22:57:27

mysql源码---核心类 (1)线程类的相关文章

MySQL源码之mysqld启动

启动mysqld,并进入listen阶段 函数调用栈: mysqld_main(): my_init();初始化变量,锁,错误串 my_thread_global_init(): 初始化互斥锁,信号量,线程独享变量 load_defaults();查找my.cnf sys_var_init();初始化system variables init_common_variables:初始化mutex,status变量 init_signals:初始化信号量处理 init_server_componen

《Java源码分析》:线程池 ThreadPoolExecutor

<Java源码分析>:线程池 ThreadPoolExecutor ThreadPoolExecutor是ExecutorService的一张实现,但是是间接实现. ThreadPoolExecutor是继承AbstractExecutorService.而AbstractExecutorService实现了ExecutorService接口. 在介绍细节的之前,先介绍下ThreadPoolExecutor的结构 1.线程池需要支持多个线程并发执行,因此有一个线程集合Collection来执行

《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService

AbstractExecutorService对ExecutorService的执行任务类型的方法提供了一个默认实现.这些方法包括submit,invokeAny和InvokeAll. 注意的是来自Executor接口的execute方法是未被实现,execute方法是整个体系的核心,所有的任务都是在这个方法里被真正执行的,因此该方法的不同实现会带来不同的执行策略.这个在后面分析ThreadPoolExecutor和ScheduledThreadPoolExecutor就能看出来. 首先来看su

《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分

这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭. 先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecut

Mysql源码目录结构

Programs for handling SQL commands. The "core" of MySQL. These are the .c and .cc files in the sql directory: derror.cc --- read language-dependent message file des_key_file.cc --- load DES keys from plaintext file discover.cc --- Functions for

Mysql源码分析--csv存储引擎

一直想分析下mysql的源码,开始的时候不知道从哪下手,先从csv的文件存储开始吧,这个还是比较简单的.我是用的是mysql5.7.16版本的源码. csv源码文件在mysql源码的mysql-5.7.16\storage\csv文件夹下,这里面除了一个make文件,剩下的四个文件就是csv的存储读取代码. transparent_file.h/cc文件比较简单,只定义了一个Transparent_file类,目的是从指定的文件中读取数据到缓存中. class Transparent_file

《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇

concurrent包中Executor接口的主要类的关系图如下: Executor接口非常单一,就是执行一个Runnable的命令. public interface Executor { void execute(Runnable command); } ExecutorService接口扩展了Executor接口,增加状态控制,执行多个任务返回Future. 关于状态控制的方法: // 发出关闭信号,不会等到现有任务执行完成再返回,但是现有任务还是会继续执行, // 可以调用awaitTe

《java.util.concurrent 包源码阅读》14 线程池系列之ScheduledThreadPoolExecutor 第一部分

ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,同时实现了ScheduledExecutorService接口. public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService ScheduledThreadPoolExecutor的功能主要有两点:在固定的时间点执行(也可以认为是延迟执行),重复执行.

MYSQL源码编译的变动

Mysql的安装,对于mysql不同版本的mysql源码编译方式不一样 5.6.2的版本开始编译方式已经由 configure 变成了cmake方式 ,相关的新的 编译方式在mysql官网已经提供 http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html 源码下载地址如下 http://dev.mysql.com/downloads/mysql/ 网上相关mysql5.6的源码编译方式 http://www.