memcached 中如何使用libevent实现多线程

本文探讨了如何在libevent单线程框架基础上,通过借鉴memcached的IO事件处理方式,利用消息队列和同步机制来实现多线程。作者通过分析libevent和memcached的源码,提出了一种实现方案,并给出了简单的服务器端测试程序示例。
摘要由CSDN通过智能技术生成

        最近在一直在看libevent的源码说实在的比较难,主要是开源代码的注解比较少所以细节有时 候不太懂,不过这些不妨碍我们对整个框架的了解。

          大体看过源代码后发现整个libevent是采用单线程写的,那么如何使用libevent实现多线程呢?百度后发现memcache的IO事件部分是用libevent实现的所以有看了下memcahce的IO部分。memcache的IO部分采用的,消息+同步队列来实现的。仿照这个模式写了一个简单IO事件程序。服务器端程序如下:

#include<stdio.h>
#include<netinet/in.h>
#include<event.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<string.h>
#include<signal.h>
#define LISTAE_SOKCET_NUM 3
#define MAX_THREAD 10

struct receive_queue
{
		int thread_id;
		struct sockaddr receive_addr;
		int receivefd;
};

typedef struct
{
		int thread_id;
		int notify_receive_fd;
		int notify_send_fd;
		struct event notify_event;
		struct event_base *base;
} LIBEVENT
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值