libevent简述
libevent是一个轻量级的基于事件驱动的高性能的开源网络库,并且支持多个平台,对多个平台的I/O复用技术进行了封装,当我们编译库的代码时,编译的脚本将会根据OS支持的处理事件机制,来编译相应的代码,从而在libevent接口上保持一致。
在当前的服务器上,面对的主要问题就是要能处理大量的连接。而通过libevent这个网络库,我们就可以调用它的API来很好的解决上面的问题。
问题: 如何处理多个客户端连接
解决方案1:I/O复用技术:循环、poll、select、epoll。
解决方案2:多线程技术或多进程技术
解决方案3:常用的上述二者复合使用
lievent也是采用的上述系统提供的select,poll和epoll方法来进行I/O复用,但是针对于多个系统平台上的不同的I/O复用实现方式,libevent进行了重新的封装,并提供了统一的API接口。libevent在实现上使用了事件驱动这种机制,其本质上是一种Reactor模式。
Reactor模式,是一种事件驱动机制。应用程序需要提供相应的接口并注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。
在Libevent中也是一样,向Libevent框架注册相应的事件和回调函数;当这些事件发生时,Libevent会调用这些回调函数处理相应的事件。
lbevent的事件支持三种,分别是网络IO、定时器和信号。定时器的数据结构使用最小堆(Min Heap),以提高效率。网络IO和信号的数据结构采用了双向链表(TAILQ)。
参考:
1. Libevent核心原理
2. libevent实现https服务器
3. libevent和基于libevent的网络编程
4. 处理大并发之四 libevent demo详细分析
5. 使用 libevent 和 libev 提高网络应用性能 ibm
6. libevent源码分析
7. http://libevent.org/
转载于:https://www.cnblogs.com/embedded-linux/p/9347294.html
libevent简述相关推荐
- 简述计算机科学的核心内容,北京大学-计算机科学与技术(2018秋)作业及复习
59.(第十章)外排序是指在排序前后,数据在外存上,排序时数据调入内存进行的排序方法. 60.(第十章)在选择排序.冒泡排序.归并排序中, 归并排序是空间复杂度最大的. 三.简答和程序题(共10题,每 ...
- 使用libevent多线程验证Linux上的服务器惊群现象
什么是惊群现象? 惊群(thundering herd)是指,只有一个子进程能获得连接,但所有N个子进程却都被唤醒了,这种情况将使性能受损. 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终 ...
- Linux下的Memcache安装(含libevent的安装)
Linux下Memcache服务器端的安装 服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 . 下载:http://www.danga.com/memca ...
- libevent源码深度剖析
原文地址:http://blog.csdn.net/sparkliang/article/details/4957667 libevent源码深度剖析一 --序幕 张亮 1 前言 Libevent是一 ...
- libevent介绍
libevent是一款事件驱动的网络开发包 由于采用 c 语言开发 体积小巧,跨平台,速度极快. 通常我们在建立服务器的处理模型的时候,主要是下面集中模型; (1) a new Connecti ...
- linux下使用NetBeans调试libevent库
1.安装libevent 参考:http://blog.csdn.net/unix21/article/details/8679269 libevent安装在usr/local/libevent下 2 ...
- Libevent调用
1.最基本的打印libevent版本 #include <event.h> #include <stdio.h>int main() {const char *version ...
- 【libevent】libevent库学习总结(二)——编程步骤
一.libevent编程步骤 0.分配并初始化event_base,两种方法 0.1 event_base_new:线程安全,代替event_init: 0.2 event_init:线程不安全,不推 ...
- 【libevent】libevent库学习总结(一)——基础
libevent库学习总结(一)--基础 一.基础 1.1. 介绍 Libevent是一个用于开发可伸缩网络服务器的事件通知库.Libevent API提供了一种机制来执行回调函数,当某个特定事件发生 ...
最新文章
- docker安装redis提示没有日记写入权限_对 Redis 在 Windows 下的利用方式思考
- mysql字符集,insert,update,delete,select
- 《复杂》读书笔记(part7)--遗传算法
- java访问权限 public private protected
- Windows线程调度学习(一)
- 美团饿了么接连宕机 只因天气太热
- vbs把excel文件另存为html,VBS实现将Excel表格保存为txt文本
- defaultlib library conflicts with use of other libs; use /NODEFAULTLIB:library
- JZ32 从上往下打印二叉树
- 2021级C语言大作业 - 消灭星星
- LintCode—删除链表中的元素(452)
- linux安装中文输入法 -谷歌拼音
- MIUI12内置软件卸载工具 MIUI系统应用 免ROOT 卸载工具
- git clone时遇到问题:remote: Incorrect username or password ( access token )
- flutter showDialog/AlertDialog 报错:No MaterialLocalizations found
- 387. 字符串中的第一个唯一字符(javascript)387. First Unique Character in a String
- vue组件中的data为什么是一个函数
- kubectl工具使用
- 关于车路协同的几点质疑与回应——天翼交通总经理王劲答记者问
- echarts绘制百家姓饼状图
热门文章
- signature=45ca03a07a2e888fb57b0d2c351110d7,Attention: Docket Number H054a Dec. 31,2004
- java 拦截jsp页面_JSP 过滤器
- K-means 聚类算法的图像区域分割
- 机器学习就那么回事儿
- 数据分析:星巴克店铺分布有何规律?
- vc sleep不占进程_Python 中的进程深入
- java8 comparator接口_Java8 Comparator 排序方法
- idea一键导包快捷键_十三肝了2晚的《IDEA操作手册-终极秘籍》终于来了...
- mql 查询多结果_详解Oracle分页查询概念、缘由及如何实现
- java核心基础 --- 基本数据类型