Maison  >  Article  >  base de données  >  Analyser le processus de démarrage de MySQL

Analyser le processus de démarrage de MySQL

怪我咯
怪我咯original
2017-04-01 10:46:421090parcourir

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 "

Bingxi : "Eh bien, Lao Yang. Comprenez-vous que la banque assigne un personnel de service au client et a servi le client pendant cette période. Il y a un extrait de code dedans, qui est toujours en attente à l'utilisateur de donner l'ordre. Mais le réseau peut être tué, tout comme une personne qui a déposé 100 et a continué à retirer 1 yuan, et a été emmenée par l'agent de sécurité >Alex : "Eh bien, récupérez l'ordre et exécutez ensuite l'ordre. command. Dans la fonction dispatch_command, la réponse est traitée en fonction des différentes demandes des clients, comme l'ouverture d'un compte, le dépôt d'argent, etc."
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn