状态线程
摘要:轻量级协程,使用单线程用setjump与longjump来实现状态转移,快速,安全。 1.初始化 2.创建线程 线程函数通过st提供的io实现 上下文切换 虚拟处理器 idle thread 信号转换为io事件 EDSM 一个线程模拟多线程 //打开udp if ((nfd = st_netfd_o
阅读全文
libevent学习八(evbuffer)
摘要:1.evbuffer以队列的形式管理字节,从尾部添加,从头部取出(FIFO) 2.evbuffer内部存储形式是多个独立的连续内存 接口 //创建和删除 struct evbuffer *evbuffer_new(void);void evbuffer_free(struct evbuffer *b
阅读全文
libevent学习七(bufferevent)
摘要:1. 每个bufferevent 都拥有类型为struct evbuffer的input buffer和out buffer,分别供数据读取和数据写入使用。 2.读取和写入数据是通过编写和设置对应的回调函数进行,而调用回调函数的时机则根据水位是否满足来的,水位又是可以设置的。默认情况下读的低水位是0
阅读全文
libevent学习六(Connect listeners )
摘要:创建与释放 //backlog需要查询平台说明,在linux2.2以后 backlog就变成了已完成连接但未accept的队列的最大值(原来是处于syn状态的,现在换成sysctl 控制的参数tcp_max_syn_backlog) struct evconnlistener *evconnlist
阅读全文
libevent学习五(Helper functions and types for Libevent)
摘要:基础类型 #ifdef WIN32 #define evutil_socket_t intptr_t #else #define evutil_socket_t int #endif ev_ssize_t 时间兼容函数 //前2个参数的计算结果放到第三个参数里面 #define evutil_tim
阅读全文
libevent学习四(Working with events)
摘要:1.事件的分类 2事件的生命周期 --非 persistent event_del(nopending) 在callback中通过event_add(重新pending)构成循环 ^ ^ | | event_new(initialized) >event_add(pending)-->事件发生(ac
阅读全文
libevent学习三(Getting an event_base)
摘要:1.一个event_base持有了一系列的事件,并监控和决定哪些事件需要激活, 2.每一个event_base背后都有一个支持其工作的方法(诸如select,poll,epoll,kquene...),默认情况会选择最快的方法,可以自定义设置 3.event_base可以被设置为lock状态,这样多
阅读全文
libevent学习二(Working with an event loop)
摘要:Runing the loop #define EVLOOP_ONCE 0x01 #define EVLOOP_NONBLOCK 0x02 #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 int event_base_loop(struct event_base *base
阅读全文
libevent学习一
摘要:常见的异步IO存在的问题: 1.使用 fcntl(fd, F_SETFL, O_NONBLOCK);,为什么在处理上效率不好。 a.在没有数据可读写的时候,循环会不停执行,浪费掉大部分cpu b.每次尝试读写文件描述符,都会执行一次内核调用(recv,write),而系统调用耗时。 2.使用sele
阅读全文