gpt4 book ai didi

java - 为什么多线程会变慢

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:35 25 4
gpt4 key购买 nike

我正在尝试将 RGB 值的字节数组保存为 png 图像,如下所示:

byte[] imgArray = ...;
int canvasSize = 512;

ColorModel c = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), null, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);

Image image = Toolkit.getDefaultToolkit().createImage(
new MemoryImageSource(canvasSize, canvasSize, c, imgArray, 0, canvasSize));

BufferedImage bimage = new BufferedImage(canvasSize, canvasSize, BufferedImage.TYPE_BYTE_GRAY);

// Draw the image on to the buffered image
Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(image, 0, 0, null); //This is what takes all the time
bGr.dispose();

ImageIO.write(bimage, "PNG", new File(uniqueFileName));

我正在使用 FixedThreadpool 同时保存多个图像。我使用的线程越多(最多达到我计算机上的空闲内核数),保存过程花费的时间就越长。在 6 个线程上运行的时间几乎是在一个线程上运行的两倍。

为什么多线程会花费这么长的时间?内存交换?我可以避免这个问题吗?

此外,如果我有更好的方法从数组中保存 png,请告诉我。

编辑以显示图片被保存为不同的图像,而不是相互覆盖。

最佳答案

我认为这是由不同类型的优化引起的。您正试图在一个路径中一次保存多个图像 - 这意味着需要排队保存操作 - 这是一个 IO 绑定(bind)任务,而不是 CPU 绑定(bind)。多个保存线程在这里可能不是很有帮助。同样在非常小的(就 CPU 功率要求而言)操作中,委派线程来完成工作可能只会带来额外的开销,从而导致完成任务所需的时间延长,而不是缩短。希望这会有所帮助:)

关于java - 为什么多线程会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35264582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com