Perl:基于事件和基于并行的风格 – 何时选择?
如果你知道一个小问题就很难提出好的问题,但我尽量做到最好.如果我误导你,我道歉.
因此,我试图理解基于事件和基于并行的风格的差异.我读了关于How to articulate the difference between asynchronous and parallel programming?的问题,但无论如何我很困惑. 为什么它对我来说非常重要:
是不是我看到了: >如果我们有IO操作或其他东西,使用外部(对我的程序)事件,如信号,文件更改,或管道中的数据等,应选择基于事件的样式 换句话说,如果我总是有子程序或类方法/功能,我知道它有一些延迟“内部”(因为很多计算或它等待的东西 – 没有区别) – 我必须使用基于并行的风格只要.并且无法使用基于事件的样式,它会不断地工作,因为此代码将阻止主程序并阻止“事件流”. 并且我可以使用基于事件的样式,只有当我在子程序或类方法/函数中写入“等待延迟时间”时,它调用主程序之外的东西. 这是正确的吗? 编辑: 这是清除伪代码 # we are CANT re-write this methods,but we are known it`s have latency sub method_with_latency_as_blackbox1{...}; sub method_with_latency_as_blackbox2{...}; my @in_data = (2,3,5); my @out_data; # we are need to run this for each item in @in_data array,somehow # and there we are CAN re-write code to speed up it # by somehow "separating" all block execution for each item # and not method_1* from method_2* - it`s impossible because it related foreach my $ent ( @in_data ){ my $res1 = method_with_latency_as_blackbox1( $ent ); my $res2 = method_with_latency_as_blackbox2( $ent,$res1 ); # yes,it related push @out_data,$res2; # we are not care about result position } 我如何使用AnyEvent或Coro来加速像这样的代码? 解决方法
不,你可以使用你想要的任何东西.我不同意“内部”延迟的概念,不同的计算机“部件”之间始终存在延迟,并且它在程序之外是“全部”.但是与磁盘io相比,网络输入/输出速度极慢(与内存/内存相比,速度极慢……).
您链接的SO问题的最佳答案提供了一个很好的解释. 如果你想要一个更好的答案,你必须告诉我们你正在创建什么或者你想要解决的问题:) 编辑: 试着指出你正确的方向: 我听说在perl你应该只是分叉新进程,使用Coro或使用像AnyEvent这样的事件.POE(见what is POE?)也可能是你想要的,但它很复杂,而不是你在五分钟内学到的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |