什么是CPU强化任务(如sorting,search等?)

你认为什么是CPU密集型任务。 就…而言,algorithm/代码(不是像video编辑等用例)。 理由是似乎不使用NodeJS的主要原因是我真正喜欢的是CPU密集型任务。 那么重要的是什么呢? 它是sorting,search,图横向,matrix乘,例如?

像“密集”或“昂贵”这样的术语是相对的,并且CPU密集型的活动并不总是很明显。 一般来说,任何不是I / O的都是CPU。 而且I / O在node.js中是asynchronous的,所以不是问题。 因此,除了I / O很贵以外,我们只剩下一切。

你select一般模式的方法是明智的。 一般来说,sorting,search,甚至algorithm都是CPU绑定的。 当然,你不能消除CPU使用率,但是如果你可以使你的数据库sorting,而不是你的应用程序代码,你可能会更好。

我也会留意大的循环。 不启动任何asynchronous事件的循环是一个瓶颈。 当然,不能完全避免循环。 他们是编程的一个事实。 如果你的循环很短,那么没问题。 如果您发现运行10,000次的循环,则可能需要考虑使用setTimeout,process.nextTick或单独的节点进程将其分解。

10,000是被任意挑选的。 这取决于循环的作用。 你的milage可能会有所不同。

在计算机上运行的进程或任务需要由操作系统pipe理的诸如CPU周期,内存,磁盘或networking等各种资源,以使每个任务有效地执行(如果可能的话,不等待资源)。

OS通过让许多进程同时使用资源来尝试最大化资源利用率。 如果一个进程需要大量的特定资源,它可能会瓶颈(延迟)它的执行。 据说这个过程对资源来说是资源密集型的。 所以资源密集型是一个相对的术语。

sorting,search,graphics遍历,matrix乘法都是CPU操作,一个进程是CPU-intensive或者不取决于它们执行的频率和频率。 例如trans-coding videocompressing files trans-coding video是非常耗费CPU资源的,因为它们运行的​​CPU操作远远超过了读/写内存或磁盘所需的操作。 如果你正在做这些,你应该为它创build一个单独的subprocess,以便它不会减慢单线程的节点进程,或者更好地创build一个节点集群 。

Bash脚本真的进入这个。 我的教授总是对我们写关于编写高效的代码,这将减轻CPU的工作

下面是Linux中低效率实践的一个很好的例子

http://hacktux.com/bash/script/efficient

我能想到的另一个例子是recursion函数,或者直到满足条件才会自动调用自己的函数。 这些通常占用大量的CPU能力。