为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在我的代码中单线程比多线程快?

为什么在我的代码中单线程比多线程快?

跃然一笑 2022-05-12 18:38:53
我的代码很慢,所以我想我可以用多线程推送它。但是当我使用多线程时它变慢了。它用于卷积操作。Matrix[] 的长度约为 1 到 64,每个 Matrix 的大小为 28x28。Matrix[][] 内核长度在第一维和第二维中为 1 到 64,每个内核为 3x3 大。(Matrix.matrix 是一个双 [][] 数组)我已经尝试过使用 Executorservice,但也有同样的问题。public static Matrix[] convolve(Matrix[] in, Matrix[][] kernel) {    // Defining size of output matrix    int kr = kernel[0][0].rows - 1;    int kc = kernel[0][0].cols - 1;    Matrix[] out = new Matrix[kernel.length];    for (int i = 0; i < kernel.length; i++) {        out[i] = new Matrix(in[0].rows - kr, in[0].cols - kc);    }    // Convolution operation    for (int i = 0; i < out[0].rows; i++) {        for (int j = 0; j < out[0].cols; j++) {            for (int m = 0; m < kernel.length; m++) { // Size of filters                double sum = 0;                for (int n = 0; n < kernel[m].length; n++) { // Depth of filters                    for (int k = 0; k < kernel[m][n].rows; k++) { // Stride over                        for (int l = 0; l < kernel[m][n].cols; l++) { // Stride over                            sum += in[n].matrix[i + k][j + l] * kernel[m][n].matrix[k][l];                        }                    }                }                out[m].matrix[i][j] = sum;            }        }    }    return out;}没有线程它可以在 5 分钟内完成 70000 次操作,而使用线程它只能完成 40000 次操作。(Matrix[] in length = 8 and Matrix[][] kernel length = 8 and 8)
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

生成线程并运行线程有其自身的开销并消耗资源。所以它会减慢你的程序,否则会在单个线程中执行。

例如:如果您的程序由于阻塞操作而变慢,那么使用线程将减少整体执行时间。

注意:使用executorservice-固定线程池和调度worker任务,不要在loop里面创建线程,线程创建有自己的开销,会很慢。


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 254 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号