引言
前面几节介绍了mysqld的初始化,接下来介绍连接的监听和处理。重点掌握TCP、Unix域套接字和poll模型,进一步可自行了解epoll模型。本文重在代码脉络的梳理和知识点的提取,相关技术细节可自行加餐。
知识点
select/poll模型;TCP;Unix域套接字
源码分析
网络IO模型
从Mysqld_socket_listener::listen_for_connection_event()可以看出,MySQL网络IO采用了select/poll模型,如下:
#ifdef HAVE_POLL
int retval= poll(&m_poll_info.m_fds[0], m_socket_map.size(), -1);
#else
m_select_info.m_read_fds= m_select_info.m_client_fds;
int retval= select((int) m_select_info.m_max_used_connection,
&m_select_info.m_read_fds, 0, 0, 0);
#endif
poll模型主要解决了select的最大文件描述符限制,但不具备移植性,在Linux上有实现,Windows没有。MySQL在Linux上默认用的是poll,而Windows上则是select。
初始化网络
if (network_init())
unireg_abort(MYSQLD_ABORT_EXIT);
network_init()里重点关注下面语句:

本文深入剖析MySQL的连接监听和处理流程,涵盖select/poll模型、TCP与Unix域套接字的应用,以及连接事件的处理机制。通过源码分析,揭示MySQL如何高效管理网络IO,确保稳定的服务响应。
最低0.47元/天 解锁文章
612

被折叠的 条评论
为什么被折叠?



