六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

解析mysql的打開過程

[摘要]有一天,兩個不懂mysql內核的人想去了解mysql內核代碼,兩個人不是去調試代碼、查找資料,而是在那邊思考。因為不了解內核,所以邊思考邊去驗證。使用的mysql代碼是5.1.7,調試環境是windows平臺下的vs2003。Bingxi:“alex,你覺得mysql的啟動過程會是什么樣的呢?我們...

有一天,兩個不懂mysql內核的人想去了解mysql內核代碼,兩個人不是去調試代碼、查找資料,而是在那邊思考。因為不了解內核,所以邊思考邊去驗證。
使用的mysql代碼是5.1.7,調試環境是windows平臺下的vs2003。
Bingxi:“alex,你覺得mysql的啟動過程會是什么樣的呢?我們以銀行為例吧。”
Alex:“嗯,bingxi。早上銀行開門了,會先準備好環境,然后開門迎客,mysql也是這樣。Mysql里面會有一個handle_connections_sockets函數,這個函數就好比是個叫號機,每個用戶來了都會取個號,然后就會進行業務處理。”

pthread_handler_t handle_connections_sockets(void *arg attribute((unused)))

{

  ……

  while (!abort_loop)

  {

    select((int) max_used_connection,&readFDs,0,0,0) < 0) //有連接了則往下來執行,否則一直等待

    ……

    accept(sock, my_reinterpret_cast(struct sockaddr *) (&cAddr),&length)  //接受請求

    ……

    create_new_thread(thd);

  }

  //abort_loop=1,則執行到這里進行推出。今天業務不處理了

}

Bingxi:“啊,這里面存在兩種可能的,1)用戶來一個就分配一個工作人員處理,2)將排號的人丟進工作隊列,根據叫號機到指定窗口獲取服務。前者的場景適合于請求量大,并且需要響應速度特別快的情況,但是分配也會有個限制,所謂的最大連接數,這樣的情況常見于互聯網行業,相應地我們可以看到機器的負載變化范圍特別大。同樣的,這也是它的一個弊端,假設每個業務都復雜(消耗資源型sql語句),同時處理的話,機器會支撐不住,這時候第二種方法就比較好,這種情況屬于事務性場景。”
Alex:“嗯,是的。Mysql選擇的是前者,oracle提供兩種方法供選擇。我們繼續往下面的代碼看,如果我們配置了線程緩存,且有可用的緩存,則喚醒該線程,否則創建新的線程。”

static void create_new_thread(THD *thd)

{

 

    if (cached_thread_count > wake_thread)

    {

      start_cached_thread(thd);

    }

    else

    {

      if ((error=pthread_create(&thd->real_id,&connection_attrib,

                            handle_one_connection,

                            (void*) thd)))

  }

}

Bingxi:“嗯,老楊。是不是理解銀行為客戶分配了一個服務人員,在這段期間一直為該客戶服務。里面有個代碼段,是一直在等用戶下命令。但是有可能網絡,或者被kill掉了,就像一個人存了100,不斷取1塊錢一樣,被保安帶走了。”

pthread_handler_t handle_one_connection(void *arg)

{

    while (!net->error && net->vio != 0 &&

           !(thd->killed == THD::KILL_CONNECTION))

    {

      net->no_send_error= 0;

      if (do_command(thd))

       break;

    }

}

Alex:“嗯,獲取命令,然后執行命令。在dispatch_command函數中,根據不同的客戶請求進行響應的處理,比如開賬戶、存錢等”

bool do_command(THD *thd)

{

 

  if ((packet_length=my_net_read(net)) == packet_error) //獲取命令

 

  DBUG_RETURN(dispatch_command(command,thd, packet+1, (uint) packet_length));

}

以上就是解析mysql的啟動過程的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 婷婷四房综合激情五月性色 | 亚洲最大的成人网 | 日韩美女在线视频网站免费观看 | 爽爽影院免费线看 | 日本一区二区免费高清视频 | 午夜影视免费 | 亚洲伊人久久大香线蕉结合 | 亚洲国产乱码在线精品 | 日韩视频91 | 欧美午夜不卡在线观看最新 | 午夜免费福利网站 | 日本高清在线一区二区三区 | 天天爱天天干天天 | 日韩女人毛片在线播放 | 日本www色视频成人免费网站 | 欧美无专区 | 午夜不卡av免费 | 午夜精品在线 | 亚洲人视频在线 | 欧洲vps一级视频 | 天天操天天舔 | 日韩一区二区三区视频在线观看 | 网友自拍第一页 | 亚洲天堂视频在线观看 | 日本高清视频免费看 | 亚洲欧美综合一区二区三区四区 | 手机看片福利在线 | 天干夜天天夜天干天 | 欧美亚洲国产日韩 | 在线观看黄日本高清视频 | 视频精品一区二区 | 欧美特黄一免在线观看 | 欧美一区二区三区四区在线观看 | 亚洲精品91 | 欧美一区二区三区精品影视 | 在线免费视频你懂的 | 无码中文字幕乱在线观看 | 欧美一级做一a做片性视频 欧美一级做性受 | 亚洲天堂网站 | 青青青在线视频免费观看 | 日韩欧美中文字幕一区 |