어느 날 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,则执行到这里进行推出。今天业务不处理了 }
캐시 스레드를 구성하고 사용 가능한 캐시가 있으면 스레드를 깨우고, 그렇지 않으면 "
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))) } }
위 내용은 mysql의 시작 프로세스를 구문 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!