- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我调用 par
在集合上,它似乎创建了大约 5-10 个线程,这对于 CPU 密集型任务来说很好。
但有时我的任务是 IO 绑定(bind)的,在这种情况下,我希望同时从 IO 拉出 500-1000 个线程 - 执行 10-15 个线程非常慢,而且我看到我的 CPU 大多处于空闲状态。
我怎样才能做到这一点?
最佳答案
您可以将阻塞 io 操作包装在 blocking
中堵塞:
(0 to 1000).par.map{ i =>
blocking {
Thread.sleep(100)
Thread.activeCount()
}
}.max // yield 67 on my pc, while without blocking it's 10
// or just use scala.concurrent.ExecutionContext.Implicits.global if you don't care
implicit val blockingIoEc: ExecutionContextExecutor = ExecutionContext.fromExecutor(
Executors.newCachedThreadPool()
)
def fetchData(index: Int): Future[Int] = Future {
//if you use global ec, then it's required to mark computation as blocking to increase threads,
//if you use custom cached thread pool it should increase thread number even without it
blocking {
Thread.sleep(100)
Thread.activeCount()
}
}
val futures = (0 to 1000).map(fetchData)
Future.sequence(futures).onComplete {
case Success(data) => println(data.max) //prints about 1000 on my pc
}
Thread.sleep(1000)
import java.util.concurrent.ForkJoinPool //scala.concurrent.forkjoin.ForkJoinPool is deprecated
import scala.util.Random
import scala.collection.parallel
val fjpool = new ForkJoinPool(2)
val customTaskSupport = new parallel.ForkJoinTaskSupport(fjpool)
val numbers = List(1,2,3,4,5).par
numbers.tasksupport = customTaskSupport //assign customTaskSupport
关于multithreading - 提高 scala .par 操作的并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56541362/
我正在尝试学习 PAR 和 PAR::Packer。我知道 PAR 是一个允许从 .par 文件加载模块的模块。 PAR::Packer中的pp、par.pl、parl这三个脚本我看不懂。 (注意:在
我想知道以下方法在如何引用对象参数方面有什么区别: public void DoSomething(object parameter){} 和 public void DoSomething(ref
根据关于并行集合的论文和互联网上的搜索,并行集合应该与 View 一起使用,但我不清楚两者之间的区别 coll.par.view.someChainedIterations 和 coll.view.p
我对par的理解是,它会在另一个核心中创建一个线程来执行。 但我未能通过以下测试代码证明这一理解,因为显示的结果似乎只有一个线程在运行。 你能帮我弄清楚这里出了什么问题吗? import Contro
通常,当我制作自己的绘图函数时,我会制作一个构造: op <- par("mypar"=myvalue) on.exit(par(op)) 这是将 par 恢复为之前值的标准方法。想象一下,您一直在运
一段时间以来,我一直在使用 PAR:Packer (pp) 为 Windows 创建二进制文件。它们总是很大(大约 6-8MB),这是可以理解的,最近我更新了我的包(我在 Windows 上使用 st
当我想快速查看 RStudio 中的图表时,我通常只使用 plot(r) 或使用 plot(r, main = title)< 添加标题。当我绘制全局栅格数据集的绘图时,“绘图” Pane 中的 xy
我正在开发一个与 PAR 捆绑在一起的大型 Perl 应用程序,以及一堆支持文件。 当应用程序在 PAR 中运行时,我可以使用 PAR::read_file 来获取存档中的这些各种文件。但是,在我开发
我正在使用 PAR::Packer,这个问题突然出现在我的脑海中。 PAR::Packer 在 Perl 中是如何工作的?它实际上是否将 Perl 脚本编译为 .exe,就像 g++ 将 C++ 源代
我想根据数据框中具有 10 个以上唯一值的变量数量来打印输出。这可以是任意数量的变量。我正在寻找一种方法来实现这一点,以便将绘图窗口设置为适合变量数量。 它应该是这样的: 2 vars -> 1 x
裁剪似乎不会影响 barplot() -- ?? par(xpd=F); barplot(1:60, ylim=c(0,6)); segments(0,0,200,100, lwd=5) 线段在 y=
我试图将三个图表绘制在一起,一个在另一个之下。 我想使用 par 将第一个图表的高度设为其他图表的两倍大,但我在使用 height 参数时遇到困难。 par(mfrow = c(3, 1),mar=c
我想知道是否有一种简单的方法可以只为绘图区域着色?相信par()$bg setting 定义了整个设备的背景颜色,所以我一直在应用低级绘图命令 polygon将彩色矩形添加到整个绘图区域。 例子 #c
这是我第一次尝试使用 Scala 的并行性。我有大量数据(可以存储为任何集合),我想使用简单的映射操作(例如 val out = data.par.map(foo(_) )在多核系统上并行化这些数据。
TL;DR:如何在 Par.Do 转换中访问创建作业时传递给作业的参数? 我有两个模板,一个用于开发,一个用于生产,它们都工作正常,只是每个模板中有一个值需要不同。到目前为止,我一直在“硬编码”这个值
我正在尝试测试 parallel 包,特别是 par 函数。我编写了一个简单的程序来测试并行性是否会加速顺序程序。 所以我在这里写了两个脚本,第一个是连续的: import Control.Paral
我有问题,我的图例太大,我的代码: par(mfrow=c(1,2)) hist(alvsloss,breaks = 100, freq=F,main="Histogramm, density cu
我正在尝试使用命名字符向量来保存自定义调色板,所以我可以说,例如调色板['red'] 而不是到处重复“#dc322f”。 但是,我似乎无法使用该向量的元素作为 par() 的参数。 (虽然它可以在其他
我正在遍历所有子页面以显示它们的标题和链接。但我还需要显示第一段节点(如果存在)。 例如,我会从以下内容页面中检索第一个 PAR 节点吗? /content /foo /jcr:cont
第1部分 根据Here SAR_x DAR_x * height ----- = -------------- SAR_y DAR_y * width 例如:宽 x 高 = 704x576,D
我是一名优秀的程序员,十分优秀!