Mysql源码学习——Connection Manager(3)
{
sql_print_warning("Can't create thread to handle named pipes");
handler_count--;
}
}
if (have_tcpip && !opt_disable_networking)
{
handler_count++;
if (pthread_create(&hThread,&connection_attrib,
handle_connections_sockets, 0))
{
sql_print_warning("Can't create thread to handle TCP/IP");
handler_count--;
}
}
if (opt_enable_shared_memory)
{
handler_count++;
if (pthread_create(&hThread,&connection_attrib,
handle_connections_shared_memory, 0))
{
sql_print_warning("Can't create thread to handle shared memory");
handler_count--;
}
}
}
由于对于namepipe和memory share的通信方式不太了解,这里只研究socket的通信方式。从代码中可以看出,handle_connections_sockets便是socket的设置,我们就来看下它。
4.socket管理创建新线程socket管理其实比较简单,直接给出其伪代码:
handle_connections_sockets
{
select; //监视socket文件描述符
new_socket = accept;//处理到来的客户端连接
thd = new THD;创建THD类
vio_tmp = vio_new(new_socket,VIO_TYPE_TCPIP, 0); //初始化VIO结构体
my_net_init(&thd->net, vio_tmp);//初始化thd的net结构体
create_new_thread(thd);//为这个连接创建一个新的线程,如果是单线程模式的话,就不会创建一个新线程
}
首先是select函数进行监视socket端口,如果监控到有连接,则通过accept函数接受客户端的连接,然后新建一个THD类,将连接参数全部设置到THD类的参数上,最后调用create_new_thread函数,这个函数便是重点。 我们进入这个函数,看下做了啥。
create_new_thread
{
++connection_count;//全局连接数自增
thread_count++; //全局线程数自增
thread_scheduler.add_connection(thd);//真正创建线程
}
So easy,首先将全局连接数+1,全局线程数+1,然后调用add_connection函数,这个函数就是我们在上面第一步设置连接的
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>