练习-libev和pyev示例
事件循环,IO复用,还是理解深刻一点好。
比较LIBEV和PYEV,发现PYTHON库只是对LIBEV作了简单的语法转换。
到了这个层次,就一个字:DIAO!!!
libev的C版:
#include <ev.h> #include <stdio.h> ev_io stdin_watcher; ev_timer timeout_watcher; static void stdin_cb (EV_P_ ev_io *w, int revents) { puts ("stdin ready"); ev_io_stop (EV_A_ w); ev_break (EV_A_ EVBREAK_ALL); } static void timeout_cb(EV_P_ ev_timer *w, int revents) { puts("timeout"); ev_break (EV_A_ EVBREAK_ONE); } int main(void) { struct ev_loop *loop = EV_DEFAULT; ev_io_init(&stdin_watcher, stdin_cb, , EV_READ); ev_io_start(loop, &stdin_watcher); ev_timer_init(&timeout_watcher, timeout_cb, .); ev_timer_start(loop, &timeout_watcher); ev_run(loop, ); ; }
############注意编译命令里,除了指定输出文件,还要指定依赖的库哟
gcc -lev -o test test.c
pyev的PYTHON版:
import signal import pyev def sig_cb(watcher, revents): print("got SIGINT") loop = watcher.loop # optional - stop all watchers if loop.data: print("stopping watchers: {0}".format(loop.data)) while loop.data: loop.data.pop().stop() # unloop all nested loop print("stopping the loop: {0}".format(loop)) loop.stop(pyev.EVBREAK_ALL) def timer_cb(watcher, revents): watcher.data += 1 print("timer.data: {0}".format(watcher.data)) print("timer.loop.iteration: {0}".format(watcher.loop.iteration)) print("timer.loop.now(): {0}".format(watcher.loop.now())) if __name__ == "__main__": loop = pyev.default_loop() # initialise and start a repeating timer timer = loop.timer(0, 2, timer_cb, 0) timer.start() # initialise and start a Signal watcher sig = loop.signal(signal.SIGINT, sig_cb) sig.start() loop.data = [timer, sig] # optional # now wait for events to arrive loop.start()
输出:
对比网上的EPOLL的IO复用监听事件的流程图:
练习-libev和pyev示例的更多相关文章
- libev安装与示例程序编译运行
Linux平台C网络编程,之前总是看各大名著(如UNIX环境高级编程和UNIX网络编程,还有TCP/IP详解 卷1:协议和深入理解计算机系统(原书第2版)),同时写点小程序练习.然而还是拿不出手. 参 ...
- 使用 libevent 和 libev 提高网络应用性能——I/O模型演进变化史
构建现代的服务器应用程序需要以某种方法同时接收数百.数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作. 有许多解决方案,但事件驱动也被广泛应用到网络编程中.并大规模部署在高 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- 使用 libevent 和 libev 提高网络应用性能
使用 libevent 和 libev 提高网络应用性能 Martin C. Brown, 作家, Freelance 简介: 构建现代的服务器应用程序需要以某种方法同时接收数百.数千甚至数万个事件, ...
- Libev学习笔记2
这一节根据官方文档给出的简单示例,深入代码内部,了解其实现机制.示例代码如下: int main (void) { struct ev_loop *loop = EV_DEFAULT; ev_io_i ...
- libev源代码浅析
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理. libev的基本使用方法 ...
- [转]Libev源码分析 -- 整体设计
Libev源码分析 -- 整体设计 libev是Marc Lehmann用C写的高性能事件循环库.通过libev,可以灵活地把各种事件组织管理起来,如:时钟.io.信号等.libev在业界内也是广受好 ...
- libev事件库使用笔记
源码下载地址:http://dist.schmorp.de/libev/ libev是一个高性能的事件循环库,比libevent库的性能要好. 安装: tar -zxf libev-4.15.tar. ...
- libev学习笔记
转 libev的使用--结合Socket编程 作者:cxy450019566 之前自己学过一些libev编程的基础,这次写压测刚好用上了,才算真正动手写了些东西,在这里做一些总结.写这篇文章是为了用浅 ...
随机推荐
- CSS实现半透明的方法
IE8不支持以前{filter:alpha(opacity=50);}的私有属性, 转而支持更规范的私有属性-ms-filter: “progid:DXImageTransform.Microsoft ...
- webstorm卡、闪退以及win10中jdk配置
今天 webstorm 突然一直处于 indexing 索引状态,然后就卡死,重装也无法解决. 搜了一下后,有人说使用 64 位客户端打开就ok. 尝试打开 64 位的客户端,但是报错,没有64位 j ...
- 通过spring来配置某个命令号和执行方法之间的映射
整理的内容 1.手动获取spring的ApplicationContext和bean对象 写一个工具类实现ApplicationContextAware接口 2.反射的知识整理 3.前后端协议交互的时 ...
- c#结束winword.exe进程、
最近在做一个c#生成word的功能.调用了微软自带的COM组件. 生成完以后发现有一个winword.exe无法关闭.调试或修改代码都没有搞明白. 遂强制关闭进程了. System.Diagnost ...
- php连接Access数据库的三种方法
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/1115/3524.html 虽然不是一个类但先放这儿吧 最近想把一个asp的网站改成 ...
- 批量杀进程——xargs用途
ps -ef|grep ora|grep “LOCAL=YES”|awk ‘{print $2}’|xargs –I {} kill -9 {} ps -ef|grep ora|grep “LOCAL ...
- Brackets 配置
插件 Brackets Icons 左侧导航的文件图标 FuncDocr 注释工具 QuickDocsJS js帮助文档 Beautify 格式化代码 Brackets Git git支持 ...
- oc 基础知识
一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex; tydedef struct{ int year; int month; int da ...
- JSON的基本格式以及与JavaScript之间的转换
JSON的基本格式以及与JavaScript之间的转换 近来,发现很多人写json格式的数据时,总是没有达到JSON的规范,虽然在语言要求不严格的情况下能够通过, 但是,难免会遇到这样那样的问题,到时 ...
- bat里如何用相对路径
在bat中直接使用绝对路径没有问题,但是文件传到其他地方时,绝对路径会发生改变,因此想通过使用相对路径来解决. 可以通过在bat获取当前bat所在的目录,然后cd 该目录来解决该问题 在bat前面增加 ...