mysql proxy中的线程分2类: 主线程和event线程。
所有的端口的连接请求都由主线程处理
包括proxy的4040,admin的4041,debug的4043端口;
在plugin的apply_config的处理中,使用的event_base都是chassis的event_base,
而它引用了main thread的event_base。
后续的读写请求就要分给不同的event线程,分配的方式是由操作系统调度决定。
分配的方式
在初始时,所有的连接请求的回调函数都是network_mysqld_conn_accept方法,
它的处理则根据协议的状态变迁做相应的处理。
当应用层触发读写请求时,会调用wait_for_event,它就实现了将连接上的后续请求挂载到
不同的event线程中。它会产生一个ping的事件给event_base,是通过fd[1]写入的,
而初始化的过程中每个event线程都在fd[0]上注册了EV_READ事件,wait_for_event将会
唤醒所有的event线程。此时的回调函数是chassis_event_handle,
所有的event 线程都会调用这个方法。
chassis_event_handle中,每个线程都尝试去获取这个event,并且将event更新到
自己的event_base中;就这样实现了一个基本的分发
阅读(1700) | 评论(0) | 转发(0) |