我在前一段时间偶然发现了node.js并且非常喜欢它.但很快我发现它缺乏执行CPU密集型任务的能力.所以,我开始使用谷歌搜索并得到这些答案来解决问题:纤维,Web工作者和线程(thread-a-gogo).现在使用哪一个是一个混乱,其中一个肯定需要使用 - 毕竟有一个擅长IO的服务器的目的是什么?建议需要!
更新:
我正在想办法离开; 只是需要建议.现在,我想到的是:让我们有一些线程(使用thread_a_gogo或webworkers).现在,当我们需要更多时,我们可以创造更多.但是在创建过程中会有一些限制.(系统没有暗示,但可能是因为开销).现在,当我们超出限制时,我们可以派生一个新节点,并开始在其上创建线程.这样,它可以持续到我们达到某个极限(毕竟,进程也有很大的开销).达到此限制后,我们将开始排队任务.每当一个线程空闲时,它将被分配一个新任务.这样,它可以顺利进行.
所以,这就是我的想法.这个想法好吗?我对所有这些过程和线程都有点新意,所以没有任何专业知识.请分享您的意见.
谢谢.:)
我正在用Java编写一个多线程应用程序,以提高顺序版本的性能.它是0/1背包问题的动态编程解决方案的并行版本.我有一个Intel Core 2 Duo,在不同的分区上同时使用Ubuntu和Windows 7 Professional.我在Ubuntu中运行.
我的问题是并行版本实际上需要比顺序版本更长的时间.我想这可能是因为线程都被映射到同一个内核线程或者它们被分配到同一个核心.有没有办法确保每个Java线程映射到一个单独的核心?
我已经阅读了有关此问题的其他帖子,但似乎没有任何帮助.
这是KnapsackThread类(扩展Thread)的main()和run()的结束.请注意,我使用slice和extra来计算myLowBound,myHiBound确保每个线程不会在dynProgMatrix的域中重叠.因此没有竞争条件.
dynProgMatrix = new int[totalItems+1][capacity+1];
for (int w = 0; w<= capacity; w++)
dynProgMatrix[0][w] = 0;
for(int i=0; i<=totalItems; i++)
dynProgMatrix[i][0] = 0;
slice = Math.max(1,
(int) Math.floor((double)(dynProgMatrix[0].length)/threads.length));
extra = (dynProgMatrix[0].length) % threads.length;
barrier = new CyclicBarrier(threads.length);
for (int i = 0; i < threads.length; i++){
threads[i] = new KnapsackThread(Integer.toString(i));
}
for (int i = 0; i < threads.length; i++){
threads[i].start();
}
for (int i = 0; i < threads.length; i++){
try …Run Code Online (Sandbox Code Playgroud)