最近在一直在看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