어느 날 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: "아, 여기에는 두 가지 가능성이 있습니다. 이용자가 오시면 담당 직원이 배정됩니다. ) 예약된 인원을 업무대기열
캐시 스레드를 구성하고 사용 가능한 캐시가 있으면 스레드를 깨우고, 그렇지 않으면 "
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!