[Perl]AnyEvent 的作用以及原理

头像
523066680
Administrator
Administrator
帖子: 404
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 38 times
Been thanked: 52 times
联系:

[Perl]AnyEvent 的作用以及原理

帖子 #1 523066680 » 2018年11月30日 15:06

转自 CU:AnyEvent有个地方无法理解。

laputa73 写了:anyevent是一个事件模型。不知道你有没有学过从前c语言和汇编里面的中断。
多数AE的模块是单进程的
对于单进程程序,正常情况下程序顺序执行,如果碰到阻塞,比如查询数据库,下载网页操作。
一种思路就是等待,等完成了继续,这种显然效率很低。
另一种思路是挂起阻塞的函数, 申请一个回调事件,先处理其他的函数,等慢函数执行完了,通过回调事件,重新获取执行权。这样就实现了无阻塞。
协程coro可以看作是事件模式的一个变种的封装。
因为整个程序其实还是单进程操作,所以这里的关键是在于阻塞的操作时可以被挂起,也就是说是支持事件回调的(EV,AE等)
如果你写个sleep(),那它本身会把整个线程全部阻塞,包括事件调度,就起不到并行的效果了。看起来就是整个进程挂住了。
其他的比如socket操作,文件操作,mysql操作等等,都可能有这个问题,必须换成支持事件的版本。

另外,AE有些模块不是单进程的 ,而是通过多进程实现的。

回到 “模块”

在线用户

用户浏览此论坛: 没有注册用户 和 1 访客