CPU处理数据 vs IO读取数据

发布时间 2023-12-21 16:46:24作者: Anne起飞记

CPU密集型(文件/数据的复杂) 指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。

CPU密集的意思该任务需要大量的运算,而没有阻塞,CPU一直全速运行。(eg:处理复杂的运算)

CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力就那些。

简而言之, CPU密集型可以理解为 就是处理繁杂算法的操作,对硬盘等操作不是很频繁,比如一个算法非常之复杂,可能要处理半天,而最终插入到数据库的时间很快。

例子:

  1. 科学计算:进行复杂的数学运算、模拟、优化等,需要大量的计算资源和时间。
  2. 大数据处理:对大量数据进行处理和分析,需要高效的数据处理算法和强大的计算能力。
  3. 图像处理和视频编辑:这些任务需要大量的计算资源来处理图像和视频数据,进行各种转换和编辑操作。
  4. 机器学习和深度学习:这些任务需要进行大量的矩阵运算、神经网络训练等,需要高性能的CPU和GPU。

以上都是CPU密集型的常见例子,它们都需要大量的计算资源和时间来完成。

 

IO密集型 (文件/数据的量大)指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作,此时CPU Loading并不高。IO密集型任务一般需要大量I/O操作(磁盘IO,网络IO),而pipeline做得不是很好,没有充分利用处理器能力。

  • 磁盘IO是指计算机系统中,数据在磁盘和内存之间的读写操作。磁盘IO通常发生在文件系统层面,用于读写文件或数据块。
  • 网络IO是指计算机系统中,数据在网络中传输的读写操作。网络IO通常发生在应用程序层面,用于发送和接收数据包。

例子:

  1. 数据库查询:数据库查询操作通常需要从磁盘读取数据,然后进行计算和处理。如数据检索、更新。
  2. 文件操作:读取、写入、复制、移动、备份等。
  3. 图形渲染:处理大量的图形数据和计算,如3D游戏、视频编辑等。密集型任务。
  4. 视频播放:从磁盘读取大量数据,并且需要实时解码播放。
  5. 网络通信:进行大量的网络请求和响应,如网络爬虫、API调用。