Maison >base de données >tutoriel mysql >Analyser le processus de démarrage de MySQL
Un jour, deux personnes qui ne comprenaient pas le noyau mysql ont voulu en savoir plus sur le code du noyau mysql au lieu de déboguer le code et de regarder. pour information, c’est là que tu penses. Parce que je ne comprends pas le noyau, je le vérifie en y réfléchissant.
Le code mysql utilisé est 5.1.7, et l'environnement de débogage est vs2003 sous la plateforme Windows.
Bingxi : "Alex, à votre avis, à quoi ressemblera le processus de démarrage de MySQL ? Prenons le comportement de la banque comme exemple."
Alex : "Eh bien, bingxi. La banque est ouverte." ce matin. L'environnement sera d'abord préparé, puis la porte sera ouverte pour accueillir les invités. Il en va de même pour mysql Il y aura une fonction handle_connections_sockets dans Mysql. . Cette fonction est comme une machine à composer. Chaque utilisateur vient Un numéro sera pris, puis le traitement commercial sera effectué "
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 : "Ah, il y a deux possibilités ici. , 1) Dès l'arrivée de l'utilisateur, un membre du personnel sera désigné pour s'en occuper, 2) Jetez les personnes programmées dans la
file d'attente des travaux , et rendez-vous à la fenêtre désignée pour obtenir le service. selon la machine qui appelle le numéro, le premier scénario convient aux situations où le volume de requêtes est important et la vitesse de réponse est particulièrement rapide, mais l'attribution est également difficile, ce qu'on appelle le nombre maximum de connexions. Cette situation est courante dans l'industrie Internet. Par conséquent, nous pouvons constater que la plage de variation de charge de la machine est particulièrement large. De même, cela constitue également un inconvénient, à supposer que chaque activité soit complexe (instructions SQL consommatrices de ressources) si elles sont traitées. en même temps, la machine ne pourra pas le supporter. Dans ce cas, la deuxième méthode est meilleure. "Alex : "Eh bien, c'est la première. méthodes parmi lesquelles choisir. Continuons à regarder le code ci-dessous. Si nous configurons le thread
cache et qu'il y a un cache disponible, réveillez le thread, sinon créez un nouveau thread "
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))) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!