Linux 下libevent如何实现高并发处理的?

program2050 2011-10-31 02:45:07
新手,了解了一下libevent库,参考网上写了个例子,大概的libevent的函数如下:

struct evhttp *http_server = NULL;

event_init();
http_server = evhttp_start(app_config.addr, app_config.port);
if (http_server == NULL) {
kill(0, SIGTERM);
exit(-1);
}

fprintf(stdout, "app listen on %s:%d\n", app_config.addr, app_config.port);

evhttp_set_timeout(http_server, app_config.timeout);
evhttp_set_gencb(http_server, generic_request_handler, NULL);

event_dispatch();
evhttp_free(http_server);



这么简单就可以了。


这样只是一个进程而已,就能达到高并发处理了?

难道libevnet里面的机制是多线程?高手指导一下,libevent是如何做到高并发处理的?不胜感激啊
...全文
538 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-11-01
  • 打赏
  • 举报
回复
我看过源码哦,有疑问来问我哦。
program2050 2011-11-01
  • 打赏
  • 举报
回复
呵呵,我昨天在这个generic_request_handler处理函数里面,sleep(1)再返回,然后才200个并发这样子,虚拟机就动不了了。

说明接收到请求后,如果是单进程的话,是一个一个处理的。libevent只负责并发接收。

不知道我理解是否正确。呵呵。
qq120848369 2011-10-31
  • 打赏
  • 举报
回复
多线程,管道通知新连接,event per thread。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧