当前位置: 首页 > 知识库问答 >
问题:

并行IntStream黑客攻击

伊俊能
2023-03-14
public void blur(final int x, final int y, final int w, final int h) {
    final Picture p = new Picture(this);
    IntStream.range(x, x + w).parallel().forEach(i
        -> IntStream.range(Y, Y + h).forEach(j
            -> {
                final Pixel pixel = this.getPixel(i, j);
                final java.util.List<Pixel> others
                = Arrays.asList(
                    p.getPixel(i - 1, j),
                    p.getPixel(i, j - 1),
                    p.getPixel(i, j + 1),
                    p.getPixel(i + 1, j),
                    p.getPixel(i - 1, j - 1),
                    p.getPixel(i + 1, j + 1),
                    p.getPixel(i - 1, j + 1),
                    p.getPixel(i + 1, j - 1),
                    pixel
                );
                pixel.setBlue((int) (others.stream()
                    .mapToInt(Pixel::getBlue).average().getAsDouble()));
                pixel.setRed((int) (others.stream()
                    .mapToInt(Pixel::getRed).average().getAsDouble()));
                pixel.setGreen((int) (others.stream()
                    .mapToInt(Pixel::getGreen).average().getAsDouble()));
        })
    );
}

这样效率高吗?我发现这确实比(int I...代码的标准快。我应该并行哪个循环(流)?这是好的编码实践吗?


共有1个答案

唐兴贤
2023-03-14

如果性能真的很重要。您应该专注于:

  • 内部循环,
  • 和内存位置。

特别地,后者依赖于像素在内存中的布局。它会对性能产生重大影响,无论它们是逐行对齐还是逐列对齐(例如,由于错误共享)。出于这个原因,我建议使用显式并行化。

void blurSequential(Picture source, int x, int y, int w, int h);
void blurParallel(Picture source, int x, int y, int w, int h) {
    int processors = Runtime.getRuntime().availableProcessors();
    blurParallel(source, x, y, w, h, processors * 4);
}

void blurParallel(Picture source, int x, int y, int w, int h, int parallelism) {
    if (parallelism <= 1) {
         blurSequential(source, x, y, w, h);
    } else if (w >= THRESHOLD_WIDTH) {
         int m = w / 2;
         async blurParallel(source, x, y, m, h, parallelism / 2);
         blurParallel(source, x + m, y, w - m, h, parallelism / 2);
         await
    } else if (h >= THRESHOLD_HEIGHT) {
         int m = h / 2;
         async blurParallel(source, x, y, w, m, parallelism / 2);
         blurParallel(source, x, y + m, w, h - m, parallelism / 2);
         await
    } else {
         blurSequential(source, x, y, w, h);
    }
}
 类似资料:
  • 我为小客户网站运行了一个VPS,有几十个WordPress安装。

  • 使用小素数可能会破坏RSA密码,但如果使用大数字则认为是不可能的。 说明为何难以入侵RSA密码的原因如下 - 蛮力攻击不会起作用,因为有太多可能的钥匙要通过。 而且,这会消耗大量时间。 字典攻击在RSA算法中不起作用,因为键是数字的,并且不包含任何字符。 由于单个加密块表示各种字符,因此很难遵循字符的频率分析。 破解RSA密码没有具体的数学技巧。 RSA解密方程是 - M = C^d mod n

  • 我想增加我的网络应用程序的安全,以防受到攻击。以下组件存在于我的系统中: Azure Web App Azure Blob存储 Azure SQL Azure Azure密钥库

  • 一段时间以来研究Powershell,后来应朋友们对 Powershell 的需求,让我写一个Powershell安全入门或者介绍方面的文章,所以这篇文章就出现了。

  • 如果黑客反编译了我的APK,他能从这个文件中看到我的API密钥吗?我不担心我的源代码存储库。我只是担心黑客能从我的APK上看到这个API密钥。我试图加密这个文件,并在运行时解密它,但有一些问题

  • 在这学期里,绝影他们班上又出了个不得不提的人物――鸡哥。 鸡哥本来长相很老实,也就是“中国传统式的农民”,但他的不安分和他的长相成鲜明的反比。他老爸极其神秘,是个有正当工作并且很有钱的人,这样来看,莫非是XXX银行行长。后来绝影也有机会见到了他老爸,他和他老爸唯一的区别是他有个好老爸,而他老爸没有。 毫无疑问,鸡哥的电脑在班上甚至这栋寝室都是最好的,那19寸的Samsun显示器就充分说明了问题,据