【问题标题】:Efficent use of Future高效利用未来
【发布时间】:2014-09-30 14:02:23
【问题描述】:

这些方法有什么不同吗?

val upload = for {
              done <- Future {
              println("uploadingStart")
              uploadInAmazonS3             //take 10 to 12 sec
              println("uploaded")
              }
}yield done

println("uploadingStart")
val upload = for {
              done <- Future {
               uploadInAmazonS3            //take 10 to 12 sec
              }
}yield done
println("uploadingStart")

我想知道线程阻塞方面的知识吗?

在执行这三行时,这里是否阻塞了线程

println("uploadingStart")
uploadInAmazonS3             //take 10 to 12 sec
println("uploaded")

在另一个它不是阻塞线程是这样的吗? 还是线程在这两种情况下都一样忙?

【问题讨论】:

    标签: multithreading scala playframework thread-safety future


    【解决方案1】:

    未来的代码将被executionContext(线程池)中的某个线程执行

    是的,执行这部分的线程

    println("uploadingStart")
    uploadInAmazonS3             //take 10 to 12 sec
    println("uploaded")
    

    会被阻塞,但不会阻塞调用线程(主线程)。

    在第二种情况下,两个 println 语句都由主线程执行。由于主线程只是在创建 future 后继续执行,因此 println 语句的执行没有任何延迟

    【讨论】:

      【解决方案2】:

      不同之处在于,在前面的代码中,println 在真正执行未来时执行,而在第二个代码中,println 在声明未来时运行(准备好,但尚未执行)。

      【讨论】:

        猜你喜欢
        • 2018-07-09
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        相关资源
        最近更新 更多