Javascript 什么算是CPU密集型任务(如排序、搜索等?)

Javascript 什么算是CPU密集型任务(如排序、搜索等?),javascript,node.js,cpu-usage,Javascript,Node.js,Cpu Usage,什么算是CPU密集型任务。依据例如,算法/代码(不像视频编辑等那样是用例)。原因是似乎不使用NodeJS的主要原因我真正喜欢的主要是CPU密集型任务。那么这算什么呢?例如,它是排序、搜索、图形横向、矩阵乘法吗 Bash脚本真的进入了这个领域。我的教授总是唠叨我们如何编写高效的代码来简化CPU的工作 下面是Linux中低效实践的一个很好的例子 我能想到的另一个例子是递归函数,或者不断调用自己直到满足条件的函数。这些通常会占用大量CPU电源 诸如“密集型”或“昂贵型”之类的术语是相对的,而且并不总

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

Bash脚本真的进入了这个领域。我的教授总是唠叨我们如何编写高效的代码来简化CPU的工作

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

我能想到的另一个例子是递归函数,或者不断调用自己直到满足条件的函数。这些通常会占用大量CPU电源

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

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

我也会留意大型循环。不触发任何异步事件的循环是一个瓶颈。当然,不能完全避免循环。对于编程来说,它们是生活中的事实。如果你的循环很短,那么没问题。如果找到一个运行10000次的循环,那么您可能需要考虑使用StimeTimeUntudio、Purrest.NeXTICK或单独的节点进程来打破它。
1万人被任意挑选。这取决于循环的作用。您的相似性可能会有所不同。

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

操作系统试图通过允许多个进程来最大化资源利用率 同时使用资源。如果流程请求特定的 大量的资源,它可以瓶颈(延迟)其执行。这个 这一过程被认为是资源密集型的,即对该资源的水资源。所以 资源密集型是一个相对的术语


排序、搜索、图形遍历、矩阵乘法都是CPU操作,一个进程是否是CPU密集型的取决于执行的次数和频率。例如,
trans-coding video
压缩文件
非常需要CPU,因为它们运行的CPU操作远远超过了读取/写入内存或磁盘的需要。如果您打算这样做,您应该为它创建一个单独的子进程,这样它就不会减慢节点进程,这是单线程的,或者最好创建一个。

如果您详细说明您正在尝试执行哪些可能是CPU密集型的操作,可能会有所帮助。相关:许多建议实际上是针对可维护性/可移植性/可读性,而不是性能,例如使用内置回显、函数和阵列。链接已断开。我可以使用工作线程,但如果他们需要等待很长时间才能完成,这不会有多大帮助吗?所以我想知道,除了挂起的UI(不难用工作线程修复)之外,做同样的计算是否比Python/Ruby慢?这取决于这两种语言的实现方式。JavaScript和python都是脚本语言。一般来说,JavaScript比Python快(Python在数字密集型的情况下更好)。看这里。假设一个手术很昂贵。你会怎么做来修复它?为NodeJS创建一个C++扩展,并调用UR JS吗?或者干脆把昂贵的工作放在一个工作线程中?还是别的什么?也许只是用另一种语言创建应用程序?就我个人而言,我的第一个努力是让操作更快,因为所有其他选项都增加了复杂性。如果这是不可能的,我会考虑SETTIMEOUT,如果我们只看几秒钟的东西,或者把它分成2-4块。如果这还不够,我会尝试一个worker进程。作为最后的手段,我可以考虑C++扩展。您可能想查看WebWork线程或类似的包。