您认为CPU密集型任务是什么?例如......算法/代码(不是像视频编辑那样的用例等)。原因似乎是不使用NodeJS的主要原因我真正喜欢的主要是CPU密集型任务。重要的是什么呢?例如,它是排序,搜索,横向图形,矩阵乘法吗?
答案 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 video
或compressing files
非常占用CPU,因为它们运行的CPU操作远远超过读/写内存或磁盘所需的操作。如果你正在计划这样做,你应该为它创建一个单独的子进程,这样它就不会减慢节点进程,这是单线程的,或者更好地创建node cluster。
答案 2 :(得分:1)
Bash脚本真的进入了这个。我的教授总是在努力编写能够简化CPU工作的高效代码
这是Linux中低效做法的一个很好的例子
http://hacktux.com/bash/script/efficient
我能想到的另一个例子是递归函数,或者在条件满足之前不断调用自身的函数。这些通常占用大量CPU能力。