免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9313 | 回复: 15
打印 上一主题 下一主题

perl 实现真正的线程 Coro [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-29 23:47 |只看该作者 |倒序浏览

论坛徽章:
0
2 [报告]
发表于 2009-10-30 09:39 |只看该作者
给大家看一下 coro的性能

code : http://gist.github.com/137424


  1. Perl5.10.0, Coro 5.14

  2.          Rate threads    fork
  3. threads 226/s      --    -31%
  4. fork    329/s     45%      --

  5. ### use DateTime;

  6.           Rate threads    fork
  7. threads 29.9/s      --    -46%
  8. fork    55.0/s     84%      --

  9. Coro と fork 比较

  10. [color=Red]
  11.         Rate  fork  coro
  12. fork   974/s    --  -96%
  13. coro 21739/s 2133%    --[/color]

复制代码

文章出处 : http://d.hatena.ne.jp/tokuhirom/20090629/1246239835

论坛徽章:
0
3 [报告]
发表于 2009-10-30 09:40 |只看该作者
看起来不错,有空试试

论坛徽章:
0
4 [报告]
发表于 2009-10-30 09:46 |只看该作者
再给大家看看 资源利用率

Coro 使用内存 13MB ithreads 使用内存 76MB

code: http://gist.github.com/137442



  1. TIME1=Coro, TIME2=serial

  2. TIME1=1.9073486328125e-06
  3. MEMORY=13,647,872
  4. 4:129914      
  5. 0:144257      
  6. 3:85000      
  7. 2:147701
  8. 1:139747
  9. 5:144191
  10. TIME1=4.45059299468994
  11. TIME2=9.5367431640625e-07
  12. 0:144182
  13. 1:140053
  14. 2:147443
  15. 3:85000
  16. 4:130146
  17. 5:145281
  18. TIME2=16.2515659332275

  19. TIME1=ithreads, TIME2=serial

  20. TIME1=3.09944152832031e-06
  21. MEMORY=76,292,096
  22. 3:85040
  23. 4:130146
  24. 1:139934
  25. 5:145085
  26. 0:144175
  27. 2:148010
  28. TIME1=3.18102717399597
  29. TIME2=3.09944152832031e-06
  30. 0:144283
  31. 1:139511
  32. 2:147305
  33. 3:85000
  34. 4:130086
  35. 5:144945
  36. TIME2=16.0958790779114


复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2009-10-30 10:58 |只看该作者
我关注 Coro 很久了,
一直比较担心它的内部实现是否足够健康,
是否可以和其它的比较大型的模块,比如 Tk、Win32::GUI、POE 同时使用。

Coro 确实可以实现一些 POE 无法实现的功能,
我看 POE 的 TODO 里面也计划做协程,不知道会不会有人给 Coro 和 POE 做个 bridge

论坛徽章:
0
6 [报告]
发表于 2009-10-30 13:32 |只看该作者

回复 #5 flw 的帖子

对应 POE的 birdge 是  AnyEvent
而且 AnyEvent 不是仅仅针对 POE 的




  1. AnyEvent - the DBI of event loop programming

  2. EV, Event, Glib, Tk, Perl, Event::Lib, Irssi, rxvt-unicode, IO::Async, Qt and POE are various supported event loops/environments.

复制代码

[ 本帖最后由 hitsubunnu 于 2009-10-30 13:35 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2009-10-30 13:35 |只看该作者
原帖由 hitsubunnu 于 2009-10-30 13:32 发表
对应 POE的 birdge 是  AnyEvent
而且 AnyEvent 不是仅仅针对 POE 的




AnyEvent - the DBI of event loop programming

EV, Event, Glib, Tk, Perl, Event::Lib, Irssi, rxvt-unicode, IO::Async,  ...

我对 EV/Event/AnyEvent 这套架构不是很清楚,
能稍微做一下介绍么?

论坛徽章:
0
8 [报告]
发表于 2009-10-30 13:36 |只看该作者
原帖由 flw 于 2009-10-30 13:35 发表

我对 EV/Event/AnyEvent 这套架构不是很清楚,
能稍微做一下介绍么?


你就把它当 DBI 啊

论坛徽章:
0
9 [报告]
发表于 2009-12-16 18:55 |只看该作者
文档里说:
合作的方式,这些线程必须相互合作,当说到CPU使用率 - 总是只有一个线程拥有的CPU,如果其他线程想要CPU,运行中的线程必须放弃。或者是明确通过调用一个函数来这样做,或隐式等待资源(如信号量,还是有一些我完成/输出请求)。
是否意味着coro对多内核CPU利用率不高啊?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2009-12-16 21:35 |只看该作者
原帖由 azure1st 于 2009-12-16 18:55 发表
文档里说:
合作的方式,这些线程必须相互合作,当说到CPU使用率 - 总是只有一个线程拥有的CPU,如果其他线程想要CPU,运行中的线程必须放弃。或者是明确通过调用一个函数来这样做,或隐式等待资源(如信号量, ...

Coro 和 POE 一样,本质上仍然是单线程的。
只是能够在编程的时候,给程序员一种多线程的假象而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP