Scala 如何使线程运行得更快?
我是WebDeveloper的新手,有个小问题。 我正在用scala akka和spray制作一个网站。 我的领导问我一个问题:我有这样的回答Scala 如何使线程运行得更快?,scala,akka,actor,spray,weighttp,Scala,Akka,Actor,Spray,Weighttp,我是WebDeveloper的新手,有个小问题。 我正在用scala akka和spray制作一个网站。 我的领导问我一个问题:我有这样的回答 case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => { Thread.sleep(10) sender ! HttpResponse(entity = "this is t2") } sleep(10)代表一个沉重的线程,其恒定的处理时间为10ms,因此它使整个程序运行速度减慢
case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
Thread.sleep(10)
sender ! HttpResponse(entity = "this is t2")
}
sleep(10)代表一个沉重的线程,其恒定的处理时间为10ms,因此它使整个程序运行速度减慢了1000倍,那么如何使它检索到的HTTPRequest增加了10倍?提示是使用actors,但不知怎么的,我阅读了整个文档,但仍然缺少一些方法:
case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
val replyTo = sender
Future {
someCPUIntensiveFunction()
replyTo ! HttpResponse(entity = "this is t2")
}
}
基本上,您将“重函数”调用转移到未来。这将使接收HttpRequest的当前线程在创建未来后立即继续,并能够处理下一个HttpRequest。future将在单独的线程中执行其代码。因此,在程序中有两条“路径”。一个将处理HttpRequest,另一个将执行
someCPUIntensiveFunction()
看看Akka:的调度器概念,它是线程.sleep
更好的替代方案。调度程序将在后台运行,因此不会影响处理web请求的默认线程池。与调度程序关联的webSocket更适合处理Ping功能。这里有一个例子(独立于Heroku):感谢您的支持,但我的意思是“Thread.sleep(10)代表的是一个持续处理时间为10毫秒的重线程”,那么在这个问题上,您如何加快网站的速度呢?我不明白为什么您不能摆脱这个Thread.sleep
。如果你想每10秒执行一次进程,(甚至一次),你应该实现一个AKKA调度程序No.NO,你得到它是错误的,我的意思是线程。睡眠代表一个函数,需要10ms来处理,并且我们需要这个函数的结果,考虑函数被优化了10ms的恒定处理时间!!谢谢你的支持:)我确实使用了Future,但这不是答案,他说我想得太多了,我只需要使用单线程。我想我错过了演员的一些东西,所以我试着重新阅读一遍