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:"아, 이 안에는 두 가지 가능성이 있다. 1) 사용자가 한 명씩 작업자를 배정하여 처리한다. 2) 번호를 매긴 사람을 작업 대기열에 넣고 호출기에 따라 지정된 창으로 서비스를 받는다. 전자의 장면은 요청량이 많고 응답 속도가 매우 빠른 경우에 적합하지만 분배도 제한이 있다. 이른바 최대 연결수라는 경우는 흔히 볼 수 있다.인터넷 업계에 있어서 우리는 기계의 부하 변화 범위가 특히 크다는 것을 볼 수 있다.마찬가지로 이것도 그의 폐단이다. 모든 업무가 복잡하다고 가정하고 (자원 소모형 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)))
}
}
빙씨: "응, 양씨. 은행이 고객한테 서비스 직원을 배정해 준 거 이해가 되시나요? 그 동안 계속 고객한테 서비스를 해줬어요. 코드 섹션이 있는데 명령을 기다리고 있었어요. 그런데 인터넷이나 킬이 떨어졌을 수도 있어요. 한 사람이 100원을 저축하고 1원을 계속 찾는 것처럼 경비원에게 끌려갔어요."
pthread_handler_t handle_one_connection(void *arg)
{
while (!net->error && net->vio != 0 &&
!(thd->killed == THD::KILL_CONNECTION))
{
net->no_send_error= 0;
if (do_command(thd))
break;
}
}
Alex: "응, 명령을 받아서 실행해. dispatch command 함수에서 계좌 개설, 입금 등 서로 다른 고객 요청에 따라 응답 처리해."
bool do_command(THD *thd)
{
if ((packet_length=my_net_read(net)) == packet_error) //
DBUG_RETURN(dispatch_command(command,thd, packet+1, (uint) packet_length));
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.