CPU密集型和IO密集型对 CPU内核之间的关系

本文介绍了CPU密集型和IO密集型程序的区别,强调了多核CPU上优化线程的重要性。对于CPU密集型,建议设置线程数等于核心数;对于IO密集型,线程数通常为核心数除以阻塞系数,以提高CPU利用效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、cpu 密集型和 io 密集型是什么

在计算机科学中,有两种不同类型的程序:IO 密集型和 CPU 密集型。这两种程序的主要差别在于它们在执行任务时瓶颈所在的地方。
IO 密集型:这类程序主要通过读写磁盘文件、网络通信等外部设备来完成任务,因此它们大多数时间都在等待外部设备的响应。这些程序在处理等待时间方面效率较低,但对于存储和传输数据方面效率较高。
CPU 密集型:这类程序主要通过使用 CPU 完成任务,因此它们大多数时间都在计算。这些程序在处理计算任务方面效率较高,但对于读写磁盘文件、网络通信等外部设备的响应方面效率较低。

2、cpu 密集型和 io 密集型与内核线程的对应关系

2.1 cpu 密集型

CPU 密集几乎无 I/O 阻塞,CPU 一直会全速运行。如果是单核情况下,开多线程是没有意义的,说白了就是一个 CPU 来回切着运行而已,徒增线程切换的资源消耗,卵用没有。可见,CPU 密集任务只有在多核 CPU 上、开多线程才可能提速。
CPU 使用率较高时(如我们训练算法模型、搞训练集),通常线程数只需要设置为 CPU 核心数的线程个数就可以了。单 CPU 对应单线程效率最高。

一般其计算公式可遵循:CPU 密集型核心线程数 = CPU 核数。

2.2 io 密集型

I/O 密集型的程序一般在达到性能极限时,CPU 占用率仍然较低。这可能是因为任务本身需要大量 I/O 操作,而程序的逻辑做得并不好,没有充分利用 CPU 能力,导致线程空余时间很多。通常我们会开 CPU 核心数数倍的线程,在线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率,充分利用 CPU 资源。

一般其计算公式可遵循:I/O 密集型核心线程数 = CPU 核数 / (1-阻塞系数)。
阻塞系数在在 0 到 1 范围内。一般为 0.8~0.9 之间,也可以取 0.8 或者 0.9。对于双核 CPU 来说,它比较理想的线程数就是 20,当然这都不是绝对的,需要根据实际情况以及实际业务来调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值