DayFour:POE,分布式/多任务编程框架

基于Perl语言的特点,POE是做为Perl的模块包,他的使用方法与其他Perl包的使用别无二致,POE是一个服务于网络编程和并行处理的事件驱动框架,能帮助你完成从简单到复杂、从底层到抽象的网络和并行任务编程。先介绍其实现原理和组成部分。

1.事件与事件句柄

在POE事件驱动程序中,中心分配器的作用是将事件分配给不同的处理程序。事件句柄的任务就是处理相应事件。POE的事件句柄在被激发运行期间将独占程序,程序的其他部分将等待事件句柄完成后执行。 


2.POE程序的组成部分

最简单的POE程序包括两个模块和一些用户代码:它们分别是POE::Kernel,POE::Session以及一些事件句柄。

(1).POE::Kernel:

POE::Kernel提供了基于事件的操作系统核心服务。包括I/O事件、警报和其它计时事件、信号事件和一些不被人意识到的事件。

POE::Kernel提供不同的方法对这些事件进行设置,比如select_read(),delay()和sig()。

POE::Kernel还能够跟踪事件发生源和与之相关的任务之间的关系。之所以能够这么做,是因为当事件发生时,它将跟踪哪个任务被激活了。于是它便知道了哪个任务调用方法来使用了这些资源,而这些都是自动完成的。

POE::Kernel也知道何事需将任务销毁。它检测任务以确定是否还有事件需要处理,或者是哪个事需要释放占用的资源。当任务没有事件可以触发的时候,POE::Kernel就自动销毁该资源。

POE::Kernel会在最后一个session停止以后终止运行。

 

(2).POE::Session:

POE::Session实例就是上面所讲的由POE::Kernel管理的“任务”。

每一个session都有一个自己私有的存储空间,叫“heap”。存储在当前session的heap中的数据很难被一个外部session得到。每一个session还拥有自己的资源和事件句柄。这些资源为拥有它们的session生成事件,而事件只被指派到其所处的session中。


(3).事件句柄:

事件句柄就是Perl程序。它们因为使用了POE::Kernel传递的参数而不同于一般的perl程序。

POE::Kernel是通过@_来传递参数。该数组的前七个成员定义了发生该事件的session的上下文。它包括了一个指向POE::Kernel运行实例的引用、事件自身的名字、指向私有heap的引用以及指向发出事件的session的引用。@_中剩下的成员属于事件自身,其中的具体内容依照被指派的事件类型而定。

举例说明:对于I/O事件,包括两个参数:一个是缓冲文件句柄,另一个是用来说明采取何种行为(input、output或者异常)的标记。

 

POE不强求程序员为每一个事件句柄分配所有的参数,因为它们中的一些参数是不常被用到的。而POE::Session会自动为@_输出剩余的常量,这样就能使我们相对比较轻松地将注意力放在重要的参数上,而让POE来处理不必需的参数。POE还允许改变参数的顺序和数量,而不会对程序造成影响。

比如说,KERNEL,HEAP和ARG0分别是POE::Kernel实例、当前session的堆栈和事件的第一个用户参数。它们可以一个个直接从@_被导出。

my $kernel=$_[KERNEL];

my $heap=$_[HEAP];

my $thingy=$_[ARG0];

或者一次性以队列片段的形式赋值给程序参数。

my($kernel,$heap,$thingy)=@_[KERNEL,HEAP,ARG0];

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值