Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-13) actor的个数限制

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

axgle给了一段代码,发现一个奇怪的问题:

1. 首先准备了一个本地的web程序,提供了一个url,返回简单的自增数字。该url在处理期间需要等待10秒,也就是说,每次读取该url,需要花10秒

2. scala中,使用1000个actor去读取它。因为actor是在新线程中运行,所以在理想情况下,总共花的时间大约是10多一点点才对。

3.但是在实际过程中,发现时间远大于10秒。这是怎么回事。

经过讨论与排查,发现scala中,并不是actor有多少个,就新开多少个线程。而是把actor只代理给有限的线程,剩下的就等待,直到有了新的可用线程。而这个有限,根据测试,发现是250多个(非确定)。

所以我们在使用actor中要注意,不要有太耗时或会阻塞的代码,比如IO,sleep等。要记住线程有限,不要空占着。

这一个文档中,有比较详细的提到:

http://wenku.baidu.com/view/845626fc700abb68a982fb50.html

comments powered by Disqus