Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1399553
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: Mysql/postgreSQL

2013-01-10 15:42:15

 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中;就这样实现了一个基本的压力分担。
     
     
阅读(1267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~