如何让线程运行得更快?

时间:2014-04-28 07:31:31

标签: scala akka actor spray weighttp

我是网络开发的新手,我遇到了一个小问题。 我使用scala akka with spray来创建一个网站。 我的领导给我一个问题:我有这样的回复

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
    Thread.sleep(10)
    sender ! HttpResponse(entity = "this is t2")
}

Thread.sleep(10)表示一个繁重的线程,其constanst处理时间是10ms,因此它使整个程序运行速度慢1000倍,那么如何让它检索10倍以上的HTTPRequest呢?提示是使用演员,但不知何故,我读了整个文件,但仍然遗漏了一些东西

1 个答案:

答案 0 :(得分:1)

一种方法:

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
    val replyTo = sender
    Future {
      someCPUIntensiveFunction()
      replyTo ! HttpResponse(entity = "this is t2")
    }
}

基本上,你移动"重功能"呼唤未来。这将使得接收HttpRequest的当前线程在创建未来时立即继续,并且能够处理下一个HttpRequest。未来将在一个单独的线程中执行其代码。所以,你将拥有两条"路径"在你的程序中。一个将处理HttpRequest,另一个将执行someCPUIntensiveFunction()