ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:30.50KB ,
资源ID:9771291      下载积分:6 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9771291.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(perl-anyevent简单介绍和入门知识.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

perl-anyevent简单介绍和入门知识.doc

1、   什么是面向事件的编程(事件驱动的编程):   编程中所有的程序是由事件决定 – 可以是由用户操作(键盘,鼠标),也可以是由其他程序和流的到达或者操作系统事件(如网络数据包到达)来触发执行.   面向事件编程可以也被定义为,写一个计算机程序,在其中的代码(通常程序的功能的头部)被明确分配应用程序的主回路,其代码本身由两部分组成方法:事件和事件处理的代码。   面向事件的编程通常被应用在三种情况下:   1.创建用户界面的控制(包括图形)   2.创建一个基于服务器的应用程序   3.游戏编程时多个对象的管理   我们系统管理时,这种应用在服务器的应用程序中使用面向事件的

2、编程很多,比如用于服务器应用解决10,000个并发连接(所谓 c10k 问题)   anyevent 是一个性能非常好的基于事件驱动的程序,有人使用它来解决 c10k 的问题,象平时我们写的程序,都是基于过程.我们都是先做完事件1-> 然后做事件2->然后做事件3 .这种方式.   但基于事件就完全不一样了,在主流程中你基本只有一个主体框架,程序的动作触发都是由事件来驱动.比如我们使用的窗口程序.点最大化最小化,都是基于事件,当接收到了最大化的事件做最大化事件那部分的程序开始运行.不在从头到尾部来执行.所以我们读基于事件的程序,最好是画成思维导图来帮助我们理解.   基于事件

3、的程序常用到的最大好处是用来做异步,例如,我们要下载 100 个文件,下载完后对这些文件进行处理.可能给每个下载和处理的过程写成事件,这些事件可以同步运行(关键在于网络连接和进行文件的读写 io 时要等待,事件是给这些等待复用起来).   不知大家了解 perl 中的 select 这个功能不,就是等到句柄可以读或者写的时候,做不同的读或者写的操作.事件循环也是一样.   在整个 anyevent 入门中,我们只要关注二个点就行, watchers(监控者) 和 条件变量.   watchers(监控者)   在 select 中,有个角色叫监控者,就是 select 函数本身.  

4、 在 anyevent 中不但可以监控 io 还可以监控别的一些事件.来做不同的处理.我们可以看成这是不断的盯着某件事情的人   有如下几个基本的内置的可以用来盯着的事情(监控者).   timer : 监控时间,到了一定的条件,然后对不同的时间做不同的事件   i/o: 这个是监控到 io 是否可以读写,然后做相应的事件   idle: 空闲时做什么事件   signal : 监控观查到不同的信息,调用相应的事件   child process: 对子程序的状态来调用相应的处理事件   timer watchers   基本语法   代码如下:   anyevent-&g

5、t;timer(   after => $seconds, # 多久之后做相应的操作.   interval => $seconds, # 在上面条件生效后,每格多久进行一次 callback.   cb => $cb, # cb 是 callback 的简写,所以知道了吧,只要到了前面的条件,就会运行 cb => 指向的函数.   );   使用实例:   下面的例子是,5 秒后,每 2 秒进行一次 callback 中的事件,直到 $w 这个注册的事件被 undef 为止(也就是 $count > 10 次).这个中的 undef $w 是取消掉这

6、种 watcher 的方法.   代码如下:   #!/usr/bin/perl   use strict;   use anyevent;   my $cv = anyevent->condvar;   my $count = 0;   my $w; $w = anyevent->timer(   after => 5,   interval => 2,   cb => sub {   $count++;   warn 这是第 $count 次调用;   if ($count >= 10) {   undef $w;   }

7、   }   );   $cv->recv;   i/o watchers   基本语法   代码如下:   my $fh = ....; # 打开一个句柄   my $io; $io = anyevent->io(   fh => $fh, # 上面打开的句柄,也可以是标准输入和输出   poll => w, # 这个地方可以选择 r 和 w 来表示读和写的 io 事件   cb => sub {   syswrite( $fh, 写入的内容 );   undef $io;   }   );   使用实例:   下面的例子,是使用

8、 io 监控到可以读,就调用 cb 的函数,直接读文件 test.txt,每次一个字节,直到读完这个文件就通过 undef 消掉这个事件.   代码如下:   #!/usr/bin/perl   use strict;   use anyevent;   my $cv = anyevent->condvar;   open my $fh, <test.txt or die 不能打开文件句柄 $!;   my $io; $io = anyevent->io(   fh => $fh,   poll => r,   cb => sub {

9、  my $len = sysread( $fh, my $buf, 1 );   if ($len > 0) {   print read '$buf'\n;   }   else {   undef $io;   die 读出错: $!;   }   });   $cv->recv;   idle watchers   基本语法   代码如下:   my $w = anyevent->idle (cb => sub { ... });   使用实例:   下面的例子,当整个程序中,没有其它事件在运行时,就会运行 idle .它就是当其它

10、事件都在等待和空着的时候,所调用的.   代码如下:   #!/usr/bin/perl   use strict;   use anyevent;   my $cv = anyevent->condvar;   my $t; $t = anyevent->timer(   after => 1,   interval => 1,   cb => sub { print time().\n }   );   my $w; $w = anyevent->idle(   cb => sub {   warn idle;   #

11、undef $w;   }   );   $cv->recv;   signal watchers   基本语法如下,就是当接收到 posix signal 的时候,运行 callback 中的事件.   代码如下:   my $w = anyevent->signal (signal => term, cb => sub { ... });   child procrss watchers   基本语法如下   代码如下:   # child process exit   my $w = anyevent->child (pid =>

12、 $pid, cb => sub {   my ($pid, $status) = @_;   ...   });   条件变量(多个条件时)   这个是 anyevent 学习上面几种事件监控后必须要了解的.大家都见到上面有 anyevent->condvar; 和 $cv->recv这二个,condvar 是 condition variable 的简写.是指当什么样的条件成立时的变量   其实就是条件,当达到什么条件时退出事件循环.所以 anyevent 中没有传统事件中的 loop 函数.所以使用条件变量就相当于让事件这个转起来.   基本的 $cv-

13、gt;recv 是和 $cv->send 成对出现的,当事件调用 send 时,就一定要有 recv 收到这个调用,才会退出事件.   下面的 $cv->begin 和 $cv->end 也基本是这个意思.send 是单个条件.begin 和 end 是多个条件成立时退出,换个语来讲,就是这些事件都成对的完成后,才退出事件.   代码如下:   #!/usr/bin/perl   use strict;   use anyevent;   my $cv = anyevent->condvar( cb => sub {   warn 调用结束;  

14、 });   for my $i (1..10) {   $cv->begin;   my $w; $w = anyevent->timer(after => $i, cb => sub {   warn finished timer $i;   undef $w;   $cv->end;   });   }   $cv->recv;   默认的 condvar 会对事件建一个条件为假的变量,所以直接有 send 和 begin send 之类才会变成真,然后退出事件循环.可以给这个地方看成一个信号量来理解就好了.y   如果条件不成立

15、在 anyevent 中事件会一直 loop .所以上面的例子中没有 send .   有关 anyevent 其它,大家入门后可以玩玩象 anyevent::http,twiggy 之类.看看这些应用和项目.   另外,在 anyevent 中我们常常使用 ev .他是一个 c 的 libev 的 perl 接口,有非常高的性能.看完上面,在看看下面 ev 的使用,非常容易吧,基本不变.只是没出现条件变量,   使用的传统的 ev::loop; 来使这个运行起来.   代码如下:   use ev;   # timers   my $w = ev::timer 2, 0, s

16、ub {   warn is called after 2s;   };   my $w = ev::timer 2, 2, sub {   warn is called roughly every 2s (repeat = 2);   };   undef $w; # destroy event watcher again   my $w = ev::periodic 0, 60, 0, sub {   warn is called every minute, on the minute, exactly;   };   # io   my $w = ev::io *s

17、tdin, ev::read, sub {   my ($w, $revents) = @_; # all callbacks receive the watcher and event mask   warn stdin is readable, you entered: , <stdin>;   };   # signals   my $w = ev::signal 'quit', sub {   warn sigquit received\n;   };   # child/pid status changes   my $w = ev::child 666

18、 0, sub {   my ($w, $revents) = @_;   my $status = $w->rstatus;   };   # stat changes   my $w = ev::stat /etc/passwd, 10, sub {   my ($w, $revents) = @_;   warn $w->path, has changed somehow.\n;   };   # mainloop   ev::loop; # loop until ev::unloop is called or all watchers stop   

19、ev::loop ev::loop_oneshot; # block until at least one event could be handled   ev::loop ev::loop_nonblock; # try to handle same events, but do not block   注:本文中大部分内容来自日本的@lestrrat   

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服