什么是CPU密集型任务(例如:排序、搜索等等)

What counts as CPU Intensive tasks (eg. sorting, searching etc?)

本文关键字:排序 搜索 例如 CPU 密集型 任务 什么      更新时间:2023-09-26

什么是CPU密集型任务?就…而言例如算法/代码(不像视频编辑等用例)。原因是,似乎不使用NodeJS的主要原因是我真正喜欢的主要是CPU密集型任务。那么什么才算呢?是排序,搜索,图截线,矩阵乘法之类的吗?

像"密集"或"昂贵"这样的术语是相对的,并且并不总是很明显哪些活动是cpu密集型的。一般来说,任何不是I/O的都是CPU。在node.js中I/O是异步的,所以不是问题。因此,除了I/O开销大之外,我们剩下了所有的东西。

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

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

10,000是任意选取的。这取决于循环做什么。您的里程可能会有所不同。

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

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

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

Bash脚本真正涉及到这一点。我的教授总是唠叨我们要写高效的代码来减轻CPU的工作量

下面是Linux

中低效实践的一个很好的例子http://hacktux.com/bash/script/efficient

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