Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1906967
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 架构设计与优化

2013-12-05 19:46:06

回去打印一下,研究一下memcached,每个线程一个ConnectQueue(CQ),主线程将数据分发到每个线程的CQ当中。
CQ当中的每个元素的类型为

点击(此处)折叠或打开

  1. struct conn_queue_item {
  2.     int sfd;
  3.     enum conn_states init_state;
  4.     int event_flags;
  5.     int read_buffer_size;
  6.     enum network_transport transport;
  7.     CQ_ITEM *next;
  8. };
这个类型的最关键的元素就是sfd,表示了该socket连接。

然后这个线程为这个队列中的元素在内存中维护一个conn的结构。
如下就是为该连接注册事件及其回调函数,并将该事件绑定到该线程的base上。

点击(此处)折叠或打开

  1. event_set(&c->event, sfd, event_flags, event_handler, (void *)c);
  2.     event_base_set(base, &c->event);
  3.     c->ev_flags = event_flags;

  4.     if (event_add(&c->event, 0) == -1) {
  5.         if (conn_add_to_freelist(c)) {
  6.             conn_free(c);
  7.         }
  8.         perror("event_add");
  9.         return NULL;
  10.     }

以后如果有用户与memcached进行交互,那么可以直接由该线程执行绑定的回调函数event_handler,完成对已建立连接的请求的处理。


阅读(2982) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

shenyanxxxy2013-12-06 10:43:09

希望能够通过阅读memcached深入学习memcached的内部机制。