Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使线程运行得更快?_Scala_Akka_Actor_Spray_Weighttp - Fatal编程技术网

Scala 如何使线程运行得更快?

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,因此它使整个程序运行速度减慢

我是WebDeveloper的新手,有个小问题。 我正在用scala akka和spray制作一个网站。 我的领导问我一个问题:我有这样的回答

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,但这不是答案,他说我想得太多了,我只需要使用单线程。我想我错过了演员的一些东西,所以我试着重新阅读一遍