什么算作CPU密集型任务(例如排序,搜索等?)

时间:2013-03-11 14:49:35

标签: javascript node.js cpu-usage

您认为CPU密集型任务是什么?例如......算法/代码(不是像视频编辑那样的用例等)。原因似乎是不使用NodeJS的主要原因我真正喜欢的主要是CPU密集型任务。重要的是什么呢?例如,它是排序,搜索,横向图形,矩阵乘法吗?

3 个答案:

答案 0 :(得分:15)

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

选择一般模式的方法是明智的。排序,搜索甚至算法通常都是CPU限制的。当然,您无法消除CPU使用率,但如果您可以对数据库进行排序而不是应用程序代码,那么您可能会感觉更好。

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

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

答案 1 :(得分:7)

在计算机上运行的进程或任务需要各种资源,如CPU周期,内存,磁盘或网络,这些资源由操作系统管理,以便每个任务有效执行(如果可能,无需等待资源)。

  

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

排序,搜索,图遍历,矩阵乘法都是CPU操作,进程是CPU-intensive还是不依赖于它们执行的次数和频率。例如,trans-coding videocompressing files非常占用CPU,因为它们运行的​​CPU操作远远超过读/写内存或磁盘所需的操作。如果你正在计划这样做,你应该为它创建一个单独的子进程,这样它就不会减慢节点进程,这是单线程的,或者更好地创建node cluster

答案 2 :(得分:1)

Bash脚本真的进入了这个。我的教授总是在努力编写能够简化CPU工作的高效代码

这是Linux中低效做法的一个很好的例子

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

我能想到的另一个例子是递归函数,或者在条件满足之前不断调用自身的函数。这些通常占用大量CPU能力。