>  기사  >  데이터 베이스  >  mysql의 시작 프로세스를 구문 분석합니다.

mysql의 시작 프로세스를 구문 분석합니다.

怪我咯
怪我咯원래의
2017-04-01 10:46:421130검색

어느 날 mysql 커널을 이해하지 못하는 두 사람이 코드를 디버깅하는 대신 mysql 커널 코드에 대해 배우고 싶어했습니다. 정보를 위해 그들은 당신이 생각하는 곳입니다. 커널을 모르기 때문에 생각하면서 검증해봅니다.
사용된 mysql 코드는 5.1.7이고, 디버깅 환경은 Windows 플랫폼 하에서 vs2003입니다.
Bingxi: "Alex, mysql의 시작 프로세스가 어떻게 될 것이라고 생각하세요? 은행 동작을 예로 들어 보겠습니다.
Alex: "글쎄, bingxi. 은행은 열려 있습니다." 오늘 아침에는 환경을 먼저 준비한 후 손님을 맞이할 문을 열겠습니다. MySQL에도 마찬가지입니다. . 이 기능은 다이얼링 기계와 같습니다. 각 사용자가 번호를 받고 비즈니스가 처리됩니다. "

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: "아, 여기에는 두 가지 가능성이 있습니다. 이용자가 오시면 담당 직원이 배정됩니다. ) 예약된 인원을 업무대기열
에 넣고, 호출기 번호에 따라 지정된 창구로 이동합니다. 전자의 시나리오는 요청량이 많고 응답 속도가 특히 빠른 상황에 적합하지만, 소위 최대 연결 수라는 제한이 있을 수도 있습니다. 이러한 상황은 인터넷 업계에서 흔히 발생합니다. 이에 따라 머신의 부하 변동 범위가 특히 크다는 것을 알 수 있습니다. 마찬가지로 각 비즈니스가 복잡하다고 가정하면(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: "글쎄, Lao Yang. 은행이 고객에게 서비스 직원을 배정하고 이 기간 동안 고객에게 서비스를 제공하고 있다는 것을 알고 있습니까? 그 안에 사용자가 다운로드하기를 기다리고 있는 코드 세그먼트가 있습니다. 하지만 100원을 입금하고 1위안을 계속 인출한 사람처럼 네트워크가 종료되어 경비원에게 끌려가는 경우도 있을 수 있습니다. 계좌 개설, 입금 등 다양한 고객 요청."아아앙
      

위 내용은 mysql의 시작 프로세스를 구문 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.