MySQL 筆記(多執行緒)

2021-05-24 01:53:17 字數 1570 閱讀 1859

多執行緒的一大優點就是資源共享,可以很方便的進行通訊,但當對共享資源操作時,有時還需要鎖操作。

為了既保證共享資源又增加系統併發量,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 (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);

多執行緒讀寫mysql 多執行緒讀寫mysql資料庫

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...

多執行緒筆記

1 stdin fileno 在unix一些系統呼叫中使用到stdin fileno表示標準輸入,stdout fileno表示標準輸出,stderr fileno表示標準出錯,使用時需要加標頭檔案 在unix下還有stdin,stdout,stderr表示同樣的含義。stdin fileno與st...

多執行緒筆記

一.程序 就是cpu所要執行的乙個任務 自己理解的 執行緒 執行緒是乙個併發執行的順序流,乙個程序包括多個順序執行流程,這執行流程稱為執行緒 就是任務中許多的 二.執行緒排程分配cpu的時間片段給不同的執行緒,得到時間片段的執行緒被cpu執行,其他執行緒等待,執行緒排程會盡可能的分配時間片段取執行。...