现在位置: 首页 > 自动控制 > 工业·编程 > 文章
2018-04-01 23:00 工业·编程 ⁄ 共 10017字 暂无评论
    libevent中基于Reactor模式的事件处理框架对应event_base,在event在完成创建后,需要向event_base注册事件,监控事件的当前状态,当事件状态为激活状(EV_ACTIVE)时,调用回调函数执行。     本文主要从以下几方面进行分析:event_base的结构,event_base的创建,事件的注册、事件分发、事件注销 event_base结构 struct event_base {   //指定某个eventop结构体,它决定了该event_base...
阅读全文
2018-03-25 22:47 工业·编程 ⁄ 共 1546字 暂无评论
1 . 创建事件 (event_new) 主要完成event的空间分配, struct event * event_new(struct event_base *base,                         evutil_socket_t fd,                        ...
阅读全文
2018-03-18 22:40 工业·编程 ⁄ 共 2324字 暂无评论
// include/event2/event_struct.h struct event {     TAILQ_ENTRY(event) ev_active_next; // 已就绪的事件链表     TAILQ_ENTRY(event) ev_next; // 已注册的事件链表     /* for managing timeouts */     union {         TAILQ_ENTRY(event) ev_next_with_common_timeout;         ...
阅读全文
2018-03-11 22:33 工业·编程 ⁄ 共 1497字 暂无评论
Reactor模式是编写高性能网络服务器的必备技术之一,它具有如下的优点: 响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的; 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/ 进程的切换开销; 可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源; 可复用性, reactor 框架本身与具体事件处理逻辑无关,具有很高的复用性 下图描述了Reactor模式的框架,主要包...
阅读全文
2018-03-04 22:26 工业·编程 ⁄ 共 1507字 暂无评论
1、 同步阻塞IO(Blocking IO) 即传统的IO模型。当用户进程向系统发起read操作时,首先需要在内核中数据准备和内核态到用户进程的数据拷贝。当两个步骤都完成后,才会返回read结果状态,才能执行后续的数据处理操作。 {     read(socket, buffer);     process(buffer); } 2、 同步非阻塞IO(Non-blocking IO) 默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。当用户进程向...
阅读全文
2018-02-25 22:12 工业·编程 ⁄ 共 812字 暂无评论
evutil:用于抽象不同平台网络实现差异的通用功能。 event和event_base: libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后 端提供抽象API, 让程序可以知道套接字何时已经准备好, 可以读或者写, 并且处理基 本的超时功能,检测OS信号。 bufferevent: 为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外, 还让程序可以请求缓冲的读写操作, 可以知道何时IO已经真正发生。( buf...
阅读全文
我们可以把libevent项目想象为造火箭的过程,我们都只是螺丝工,那么造火箭需要做什么? 1. 拿出火箭壳(创建框架) 2. 造螺丝 (创建事件) 3. 拧螺丝 (添加事件) 4. 造火箭(事件循环) 一:掏出火箭壳 —>event_base()创建与释放 我们开始第一步:创建一个event_base // 创建event_base struct event_base* event_base_new(void) 当然,作为一个优秀的c语言程序员(咳,我还是个菜),要在创建的同时考虑资源释放的问...
阅读全文
2018-02-16 19:10 工业·编程 ⁄ 共 833字 暂无评论
1.ubuntun14.04下安装cgdb cong@msi:~$ sudo apt-get install cgdb 2. 使用: cgdb ./hello就可以了 a. cgdb分为上面的vi窗口与下面的gdb窗口 ESC-->切到vi窗口 i -->切到gdb窗口 - -->减小vi窗口 = -->增大vi窗口 shift - -->减小很多vi窗口 shift = -->增大很多vi窗口 b.断点 空格添加/删除断点 c.  gdbinit脚本不能用 warning: File "/work/ffmpeg/jpeg/jpegc/.gdbinit" auto-loading has...
阅读全文
2018-02-11 20:35 工业·编程 ⁄ 共 440字 暂无评论
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。 只要是学习编程似乎都逃离不了“hello word”定律! 编...
阅读全文
最近在编写libevent项目时,启动命令后:提示error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory 如果缺少的是其他库,该方法依然适用,现以libevent-2.1.so.6为例 首先,我们需要查看该库是否存在: find / -name libevent-2.1.so.6 添加环境变量的方法,添加 export LD_LIBRARY_PATH=XXX(此为find命令中查找到的库路径) export LD_LIBRARY_PATH=/usr/l...
阅读全文