Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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.concurrent.Blocking的问题_Scala - Fatal编程技术网

关于scala.concurrent.Blocking的问题

关于scala.concurrent.Blocking的问题,scala,Scala,我相信以下是真的。欢迎更正和澄清: 绑定I/O的任务可能会占用线程并使其长时间闲置。threadpool具有特殊功能,用于检测和处理该块中的Futures中的特殊标记代码。由ForkJointhreadpool支持的Future中的blocking{}块中包含的代码将被监视空闲,并根据需要分配额外的线程。在blocking{}中封装代码,而该代码不是由Future执行的,该Future由适当配置的ForkJoin线程池支持,因此无效。该方法具有以下签名: def blocking[T](body

我相信以下是真的。欢迎更正和澄清:

绑定I/O的任务可能会占用线程并使其长时间闲置。threadpool具有特殊功能,用于检测和处理该块中的
Future
s中的特殊标记代码。由ForkJointhreadpool支持的Future中的blocking{}块中包含的代码将被监视空闲,并根据需要分配额外的线程。在
blocking{}
中封装代码,而该代码不是由
Future
执行的,该
Future
由适当配置的
ForkJoin
线程池支持,因此无效。该方法具有以下签名:

def blocking[T](body: ⇒ T): T
blocking
调用似乎被设计为通过一个或多个
BlockContext
引用相互了解并相互协作,而这些引用通常与普通Scala程序员无关

问题
  • 当全局
    ExecutionContext
    不支持这些
    Future
    时,
    f0
    的行为似乎与
    f1
    f2
    相同。或者,如果此代码显示
    global
    在范围内,
    f1
    f2
    的行为可能不同,因为
    f1
    rpc1
    rpc2
    阻塞时可能会旋转更多线程,因为这些表达式被包装在
    blocking
    表达式中
  • 导入scala.concurrent_
    导入scala.concurrent.ExecutionContext.Implicits.global
    val f0=未来{
    val w=非阻塞计算1()
    val x=rpc1(param1、param2等)val y=nonBlockingComputation2()
    val z=rpc2(参数3、参数4等)
    (w,x,y,z)的剂量
    }
    val f1=未来{
    val w=非阻塞计算1()
    val x=阻塞{rpc1(param1、param2等)}
    val y=非阻塞计算2()
    val z=阻塞{rpc2(param3、param4等)}
    (w,x,y,z)的剂量
    }
    val f2=未来{
    阻塞{
    val w=非阻塞计算1()
    val x=rpc1(参数1、参数2等)
    val y=非阻塞计算2()
    val z=rpc2(参数3、参数4等)
    (w,x,y,z)的剂量
    }
    }
    

  • Scala 2.11.4实际上是否以不同的方式处理
    f1
    f2
    的执行
  • 在未来的Scala版本中,这种行为会发生变化吗
  • 如何增强自定义的
    ForkJoin
    线程池,例如Akka配置提供的这个线程池,以便它也支持
    阻塞

    import scala.concurrent._ import scala.concurrent.ExecutionContext.Implicits.global val config = """ |akka { | my-dispatcher { | type = Dispatcher | executor = "fork-join-executor" | fork-join-executor { | parallelism-min = 2 | parallelism-factor = 2.0 | parallelism-max = 10 | } | throughput = 100 | } |} |""".stripMargin implicit val executionContext = system.dispatchers.lookup("my-dispatcher") 导入scala.concurrent_ 导入scala.concurrent.ExecutionContext.Implicits.global val config=“” |阿克卡{ |我的调度员{ |类型=调度程序 |executor=“fork join executor” |fork-join执行器{ |平行度最小值=2 |平行度系数=2.0 |最大平行度=10 | } |吞吐量=100 | } |} |“.stripMargin” 隐式val executionContext=system.dispatchers.lookup(“我的调度程序”)
  • Aleksandar Prokopec告诉我,定制
    ExecutionContext
    以响应
    阻塞
    提示的最简单方法是包装
    ForkJoinPool
    并实现
    execute
    方法,以便它设置您自己的
    BlockContext
    对象,或者工作线程是
    BlockContext
    对象。请参阅:。不幸的是,这并没有告诉我多少。谁能给我举个具体的例子吗