关于scala.concurrent.Blocking的问题
我相信以下是真的。欢迎更正和澄清: 绑定I/O的任务可能会占用线程并使其长时间闲置。threadpool具有特殊功能,用于检测和处理该块中的关于scala.concurrent.Blocking的问题,scala,Scala,我相信以下是真的。欢迎更正和澄清: 绑定I/O的任务可能会占用线程并使其长时间闲置。threadpool具有特殊功能,用于检测和处理该块中的Futures中的特殊标记代码。由ForkJointhreadpool支持的Future中的blocking{}块中包含的代码将被监视空闲,并根据需要分配额外的线程。在blocking{}中封装代码,而该代码不是由Future执行的,该Future由适当配置的ForkJoin线程池支持,因此无效。该方法具有以下签名: def blocking[T](body
Future
s中的特殊标记代码。由ForkJoin
threadpool支持的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)的剂量
}
}
f1
和f2
的执行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(“我的调度程序”)ExecutionContext
以响应阻塞
提示的最简单方法是包装ForkJoinPool
并实现execute
方法,以便它设置您自己的BlockContext
对象,或者工作线程是BlockContext
对象。请参阅:。不幸的是,这并没有告诉我多少。谁能给我举个具体的例子吗