免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yvmu
打印 上一主题 下一主题

Coro如何动态的创建新协程? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2013-08-05 10:15 |只看该作者
1. 用Coro::Semaphore控制HTTP并发。
2. 用async_pool控制创建Coro的的数量。async+join的方式是不可能控制这个的。
3. "如何在网络阻塞的时候少创建点并发,在网络状况比较流畅的时候多创点并发",这是个主观的判断,你需要自己设置阀值,再调整并发。
4. 10楼的帖子,你看看“cede”都写到哪去了...
5. 主贴对$coro->ready的理解不正确。是不是让出CPU资源一个是通过程序做,阻塞了,Coro会主动让出CPU。另一个是手工做,通过cede。$coro->ready说的是另外一回事(详见文档)

楼主需要再多看几遍作者文档,一直问问题就一直有问题

论坛徽章:
1
白羊座
日期:2013-11-09 20:03:00
12 [报告]
发表于 2013-08-05 20:10 |只看该作者
py 发表于 2013-08-05 10:15
1. 用Coro::Semaphore控制HTTP并发。
2. 用async_pool控制创建Coro的的数量。async+join的方式是不可能控制这个的。

谢谢斑竹,这应该是可行的,再在去看看async_pool的说明,刚接触多线程/协程,有些原理得多琢磨琢磨。

py 发表于 2013-08-05 10:15
3. "如何在网络阻塞的时候少创建点并发,在网络状况比较流畅的时候多创点并发",这是个主观的判断,你需要自己设置阀值,再调整并发。


这个可能真的只能手动调整了。

py 发表于 2013-08-05 10:15
4. 10楼的帖子,你看看“cede”都写到哪去了...
5. 主贴对$coro->ready的理解不正确。是不是让出CPU资源一个是通过程序做,阻塞了,Coro会主动让出CPU。另一个是手工做,通过cede。$coro->ready说的是另外一回事(详见文档)

楼主需要再多看几遍作者文档,一直问问题就一直有问题


确实两个例子里面的代码都有问题,我当时是在一台Windows的机子上随手写的,也没测试,后来发现就没改,忘记了回帖说明一下。Sorry~

文档我看了几边的,但里面有些东西还是琢磨不透……

论坛徽章:
1
白羊座
日期:2013-11-09 20:03:00
13 [报告]
发表于 2013-08-06 06:53 |只看该作者
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. use Smart::Comments;
  5. use Coro;
  6. use AnyEvent::HTTP;
  7. use Benchmark;

  8. my $T0=Benchmark->new;

  9. $Coro::POOL_SIZE = 2;
  10. my $count = 1000;
  11. my $limit = Coro::Semaphore->new( $Coro::POOL_SIZE );
  12. my $sem = Coro::Semaphore->new( 1 - $count);
  13. for( 1 .. $count ){
  14.         $limit->down;
  15.         async_pool {
  16.                     print "$_[0] start...\n";
  17.                 http_get 'http://www.baidu.com', cb => Coro::rouse_cb;
  18.                 my @res = Coro::rouse_wait;
  19.                 print $_[0]."done! $res[1]->{Status}\n";

  20.             $sem->up;
  21.             $limit->up; } $_;
  22. };
  23. $sem->down;

  24. my $T1=Benchmark->new;
  25. my $td = Benchmark::timediff($T1, $T0);
  26. print Benchmark::timestr($td)."\n";
复制代码
这种模式好理解,就不知道斑竹是否还有更高效的代码?

论坛徽章:
1
白羊座
日期:2013-11-09 20:03:00
14 [报告]
发表于 2013-08-06 06:57 |只看该作者
还有我这里$Coro:OOL_SIZE = 2;并发两个HTTP请求速度会最快,这个怎么理解呢?虽然不是并发越多越好,但这个并发数远远低于我的预估呀。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2013-08-06 09:07 |只看该作者
“并发多少个http请求会最快”,这个和你本地到对方URL的带宽有关系,也和对方服务器设置有关系(例如设置了每个IP10个连接)。和你用的程序语言以及机制没关系(因为你已经不是单线程连接了)。

我个人认为,Coro的存在并不是为了“最快”,拿http举例,如果你访问一个页面需要2秒,你有10个这样的页面需要访问,这个时候最快也需要2秒才能完成这10个页面。再高效也不可能突破2秒
Coro的存在是为了充分利用资源(内存,CPU,网络)完成任务,并且保证使用的资源更少。这是通过让“线程”之间有最大限度的协作来完成的。

另外,POOL_SIZE不是“控制并发数”的,它是线程池的大小。这个文档里也有说明。

论坛徽章:
1
白羊座
日期:2013-11-09 20:03:00
16 [报告]
发表于 2013-08-06 09:55 |只看该作者
非常感谢您的指教。请问您有上irc或则google group吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2013-08-06 12:42 |只看该作者
没有
不过我还是经常来这个论坛的。我对Coro的理解也没有很深入,也就是“熟练使用”而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP