for i= 1 : 512
for j = 1: 512
大计算量操作.
end
end
每次循环的大计算量操作. 写操作没有相互的效果 也就是说 i=1 j=1 和 i=1 j=2 可以同时操作 不影响结果...希望我表达清楚了.
但是有同时的读操作..也就是说要经常读一个内容(数组).需要经常调用同一个对象读.
这样搞成多线程可行么/? 大概怎么拆分合适?
希望给指点指点!多谢!
26 个解决方案
#1
for i= 1 : 512
for j = 1: 512
new YourThread(j).execute();
end;
end;
你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
for j = 1: 512
new YourThread(j).execute();
end;
end;
你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
#2
这样她就自动多线程来跑了??
#3
不理解楼主的意思
写操作和读操作的输出是什么?在大计算量操作中,到底做了些什么?
写操作和读操作的输出是什么?在大计算量操作中,到底做了些什么?
#4
里面是复杂的数学公式的实现..计算量很大.
读写都是针对数组
#5
#6
不理解楼主的意思
#7
我觉得楼主有必要把线程的概念好好理解一下,因为我觉得好像你的功能里没必要用线程,还有就是把你的需求说的再详细一些。
#8
关注中。。。
#9
如果写操作没有像互相影响,只是读同一个数组(估计i,j就是数组元素的位置),那么可以不用锁数组对象,性能相对有所提高。
for i= 1 : 512
for j = 1: 512
new YourThread(i, j, [yourShareObject]).start();
end;
end;
for i= 1 : 512
for j = 1: 512
new YourThread(i, j, [yourShareObject]).start();
end;
end;
#10
不理解楼主的意思。
#11
建议用线程池来做,自己new thread,因为线程过多,耗资源
#12
可以试一试,按楼主说的,你的每轮循环对数组的读,其实也不互斥,用多线程或许可以有点用。不过多线程的创建销毁切换也存在开销,可以试试。
每日回帖可以获得10分可用分~
每日回帖可以获得10分可用分~
#13
如果只是单纯的数学计算,多线程有可能反而降低运行效率。
不过你可以试一试。
在多线程下,只涉及读的操作的话,效率很高。
不过你可以试一试。
在多线程下,只涉及读的操作的话,效率很高。
#14
只是针对某一数组的操作,觉得不需要用多线程啊。多线程往往是针对多事件的处理。照你的意思,如果只是做数学计算的话,一次循环做一个计算效率肯定比多线程来得高。
如果你部署的环境是多CPU的话可以考虑加几个线程。多线程能提高效率的话主要是针对能并发的事件,你现在的瓶颈应该是在CPU的时间片分配上。
#15
进行运算使用多线程操作没多大用处的,甚至效率更低下。
我觉得你应该从你程序方面入手进行优化,如:考虑使用一些合理的算法。
我觉得你应该从你程序方面入手进行优化,如:考虑使用一些合理的算法。
#16
比较赞同这个,线程太多反而影响性能。
#17
public class Test
{
public static void main(String[] args)
{
for (int i = 0; i < args.length; i++)
{
for (int k = 0; k < args.length; k++)
{
new MyThread(i,k).start();
}
}
}
}
class MyThread extends Thread{
private int i;
private int k;
public MyThread(int i,int k){
this.i = i;
this.k = k;
}
@Override
public void run()
{
// My example
System.out.println(i+k);
}
}
#18
线程池最好 呵呵
#19
将计算任务分成等分,使用 java.util.concurrent.CountDownLatch 进行阻塞,直到所有的任务全部完成 CountDownLatch 就可以释放,合并计算结果。
#20
不理解楼主的意思。
#21
楼主 建议你去javaeye去看一下吧 在上面搜索 总之 好几个网站一起用会对你有帮助的
#22
看机器的cpu是几核的,如果线程数超过核数,性能其实是下降的。每个核分配一个线程,才能最大程度的利用cpu
也就是说,如果你的程序在单核电脑上跑,不要用多线程。如果在双核上跑,就用双线程
也就是说,如果你的程序在单核电脑上跑,不要用多线程。如果在双核上跑,就用双线程
#23
还是火龙果的想法有效率,但是分的等分不宜过多
#24
学习
#25
学习
#26
不明白问题
#1
for i= 1 : 512
for j = 1: 512
new YourThread(j).execute();
end;
end;
你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
for j = 1: 512
new YourThread(j).execute();
end;
end;
你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
#2
这样她就自动多线程来跑了??
#3
不理解楼主的意思
写操作和读操作的输出是什么?在大计算量操作中,到底做了些什么?
写操作和读操作的输出是什么?在大计算量操作中,到底做了些什么?
#4
里面是复杂的数学公式的实现..计算量很大.
读写都是针对数组
#5
#6
不理解楼主的意思
#7
我觉得楼主有必要把线程的概念好好理解一下,因为我觉得好像你的功能里没必要用线程,还有就是把你的需求说的再详细一些。
#8
关注中。。。
#9
如果写操作没有像互相影响,只是读同一个数组(估计i,j就是数组元素的位置),那么可以不用锁数组对象,性能相对有所提高。
for i= 1 : 512
for j = 1: 512
new YourThread(i, j, [yourShareObject]).start();
end;
end;
for i= 1 : 512
for j = 1: 512
new YourThread(i, j, [yourShareObject]).start();
end;
end;
#10
不理解楼主的意思。
#11
建议用线程池来做,自己new thread,因为线程过多,耗资源
#12
可以试一试,按楼主说的,你的每轮循环对数组的读,其实也不互斥,用多线程或许可以有点用。不过多线程的创建销毁切换也存在开销,可以试试。
每日回帖可以获得10分可用分~
每日回帖可以获得10分可用分~
#13
如果只是单纯的数学计算,多线程有可能反而降低运行效率。
不过你可以试一试。
在多线程下,只涉及读的操作的话,效率很高。
不过你可以试一试。
在多线程下,只涉及读的操作的话,效率很高。
#14
只是针对某一数组的操作,觉得不需要用多线程啊。多线程往往是针对多事件的处理。照你的意思,如果只是做数学计算的话,一次循环做一个计算效率肯定比多线程来得高。
如果你部署的环境是多CPU的话可以考虑加几个线程。多线程能提高效率的话主要是针对能并发的事件,你现在的瓶颈应该是在CPU的时间片分配上。
#15
进行运算使用多线程操作没多大用处的,甚至效率更低下。
我觉得你应该从你程序方面入手进行优化,如:考虑使用一些合理的算法。
我觉得你应该从你程序方面入手进行优化,如:考虑使用一些合理的算法。
#16
比较赞同这个,线程太多反而影响性能。
#17
public class Test
{
public static void main(String[] args)
{
for (int i = 0; i < args.length; i++)
{
for (int k = 0; k < args.length; k++)
{
new MyThread(i,k).start();
}
}
}
}
class MyThread extends Thread{
private int i;
private int k;
public MyThread(int i,int k){
this.i = i;
this.k = k;
}
@Override
public void run()
{
// My example
System.out.println(i+k);
}
}
#18
线程池最好 呵呵
#19
将计算任务分成等分,使用 java.util.concurrent.CountDownLatch 进行阻塞,直到所有的任务全部完成 CountDownLatch 就可以释放,合并计算结果。
#20
不理解楼主的意思。
#21
楼主 建议你去javaeye去看一下吧 在上面搜索 总之 好几个网站一起用会对你有帮助的
#22
看机器的cpu是几核的,如果线程数超过核数,性能其实是下降的。每个核分配一个线程,才能最大程度的利用cpu
也就是说,如果你的程序在单核电脑上跑,不要用多线程。如果在双核上跑,就用双线程
也就是说,如果你的程序在单核电脑上跑,不要用多线程。如果在双核上跑,就用双线程
#23
还是火龙果的想法有效率,但是分的等分不宜过多
#24
学习
#25
学习
#26
不明白问题