MySQL 笔记(多线程)

    技术2022-06-25  69

    多线程的一大优点就是资源共享,可以很方便的进行通信,但当对共享资源操作时,有时还需要锁操作。

    为了既保证共享资源又增加系统并发量,MySQL使用了很多函数库来代替标准库函数(在mysys文件夹下面定义)

    而对于锁的处理,MySQL按照相关性将将全局资源和变量分组,以组为单位进行加锁

    全局锁以LOCK_开头,在mysql_priv.h文件中定义

    线程锁以THR_LOCK_开头,在my_thr_init.c中定义

    线程同步使用条件变量来实现,以COND_开头,与锁结合使用。

     

    启动服务器

    服务器启动代码在sql/mysqld.cc中实现。

    #ifdef __WIN__ int win_main(int argc, char **argv) #else int main(int argc, char **argv) #endif ……   mysqld调用的主要函数如下:   MY_INIT(argv[0]); //初始化线程和mysql库函数,调用my_init()函数 logger.init_base(); //初始化日志类   /*初始化全局变量,给mysql设置默认参数*/ if (init_common_variables(MYSQL_CONFIG_NAME, argc, argv, load_default_groups)) unireg_abort(1); init_signals(); //初始化各种同步信号 pthread_attr_setstacksize(&connection_attrib,my_thread_stack_size*2);//设置线程栈,my_thread_stack_size默认大小为65536 。。。。。。 /*检查用户*/ if ((user_info= check_user(mysqld_user))) { #if defined(HAVE_MLOCKALL) && defined(MCL_CURRENT) if (locked_in_memory) // getuid() == 0 here set_effective_user(user_info); else #endif set_user(mysqld_user, user_info); } if (init_server_components()) //初始化服务器模块 unireg_abort(1); network_init();//初始化网络子系统  acl_init(opt_noacl);//初始化ACL  create_shutdown_thread();  //创建关闭线程  start_handle_manager();      handle_connections_sockets(0);  //服务处理函数,等待接受命令    /*最后要进行清理以及等待线程结束*/ clean_up(1); wait_for_signal_thread_to_end(); clean_up_mutexes(); my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0); exit(0);  

    最新回复(0)