axgle给了一段代码,发现一个奇怪的问题:
1. 首先准备了一个本地的web程序,提供了一个url,返回简单的自增数字。该url在处理期间需要等待10秒,也就是说,每次读取该url,需要花10秒
2. scala中,使用1000个actor去读取它。因为actor是在新线程中运行,所以在理想情况下,总共花的时间大约是10多一点点才对。
3.但是在实际过程中,发现时间远大于10秒。这是怎么回事。
经过讨论与排查,发现scala中,并不是actor有多少个,就新开多少个线程。而是把actor只代理给有限的线程,剩下的就等待,直到有了新的可用线程。而这个有限,根据测试,发现是250多个(非确定)。
所以我们在使用actor中要注意,不要有太耗时或会阻塞的代码,比如IO,sleep等。要记住线程有限,不要空占着。
这一个文档中,有比较详细的提到: