还有struct st_vio这个结构体,这个结构体是一个命令的中转站。在“交际花”THD中也定义了一个vio类型的结构体。这个结构体的功能就是从储存从套接字中读取通信内容,然后又把自己的值赋给THD的vio变量。VIO类型中详细的描述了一次请求,包括请求的内容、时间、请求的套接字地址等等。之后发生的事情就是把这个“交际花”传递到服务线程,create_thread_to_handle_connection()实现这个功能。
以下是删减后的代码
复制代码 代码如下:
void create_thread_to_handle_connection(THD *thd)
{
if (cached_thread_count > wake_thread)
{
mysql_cond_signal(&COND_thread_cache);
}
else
{
mysql_thread_create(key_thread_one_connection, &thd->real_id, &connection_attrib, handle_one_connection, (void*) thd)));
}
}
后边的内容就都是在服务线程中实现的,《深入理解MySQL》中有很详细的代码跟踪,感兴趣的同学可以看看。我把函数调用顺序附上,供参考。
复制代码 代码如下: