IO频繁读取占用CPU资源?

IO频繁读取占用CPU资源?

参考链接:
https://blog.csdn.net/qq_29454347/article/details/84997053
https://www.zhihu.com/question/27734728

场景:因为最近在做python与mysql数据传递,通过多线程多进程等加快读取速度,减小消耗的问题。因其中计算量很少,多为数据的写入与读取,认为可视为IO密集型操作。
IO密集型定义:CPU消耗很少,任务的大部分时间都是在等待IO操作完成。(IO的速度远远低于CPU和内存的速度)。
疑问
1.IO读取不消耗CPU资源吗
2.就算一个消耗很少的话,IO密集型,说明IO过程很多。很多的话是不是也会占用很多CPU消耗
3.项目中虽然是IO型多线程线程池,但CPU占用也很高
引发:并发的意义
python中因为有GIL锁,多线程本质上同一时间也只能运行一个线程而已。所说的python多线程本质上也只是多并发。本人用3线程与3进程处理同样的数据,进程明显比线程快很多。

解1IO占用CPU资源,但是不多。原因是有DMA(直接存储器访问,director memory access)帮助。计算机硬件上使用DMA来访问磁盘等IO,也就是请求发出后,CPU就不再管了,直到DMA处理器完成任务,再通过中断告诉CPU完成了。所以总体来说单个IO对CPU占用的并不多

流程:
CPU计算文件地址 ——> 委派DMA读取文件 ——> DMA接管总线 ——> CPU的A进程阻塞,挂起——> CPU切换到B进程 ——> DMA读完文件后通知CPU(一个中断异常)——> CPU切换回A进程操作文件

在这里插入图片描述
**解2:**虽然IO不会占用大量的CPU时间,但是非常频繁的IO还是会非常浪费CPU时间的,所以面对大量IO的任务,有时候是需要算法来合并IO,或者通过cache来缓解IO压力的。

**解3:**非空闲等待,比如IO等待、资源争用(同一资源被不同线程请求,而此资源又需要保持一致性,只能前一个释放后一个再访问,这样导致的等待)也会导致CPU过高

并发的意义:假设原先读取文件CPU需要傻等50纳秒。现在尽管两次上下文切换要各消耗5纳秒。CPU还是赚了40纳秒时间片。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: LabVIEW可以通过利用系统资源监控功能来读取CPU占用情况。主要步骤包括: 1. 打开“系统资源监视器”(在Windows中可以按Ctrl+Shift+Esc打开任务管理器,然后切到“性能”选项卡,点击“打开资源监视器”)。 2. 在LabVIEW中调用“System Exec.vi”节点,通过命令行执行“typeperf -sc 1 \"Processor(_Total)\\% Processor Time\"”,可以获取当前CPU占用率。 3. 通过LabVIEW的“System Exec”节点可以将输出的值传入自定义的VI中,进行进一步处理或显示。 需要注意的是,CPU占用率是一个动态变化的指标,而且实际占用率可能会受到多种因素的影响,如系统内其它进程的占用CPU类型和数量、运行的软件程序等等,因此无法完全准确地反映CPU的实际使用情况。在实际应用中,还需综合考虑不同的性能指标和使用场景,进行综合评估和优化。 ### 回答2: LabVIEW是一款强大的视觉化编程语言,能够实现对计算机的硬件资源进行监测和控制。在LabVIEW程序中,可以通过使用System Exec.vi或System Exec.Async.vi函数调用Windows系统的性能计数器工具,例如使用“typeperf“命令来查看CPU占用情况。 具体实现步骤如下: 1. 首先在Block Diagram中搜索并拖拽“System Exec.vi”或“System Exec.Async.vi”函数,后者比前者更适合于需要及时获取结果的情况。 2. 对System Exec.vi进行设置,如下图所示,其中Program是“cmd.exe”,Arguments是一串命令行字符串,“/c typeperf“\\Processor(_Total)\% Processor Time“”,即执行typeperf命令来查看总CPU使用率。其中/c表示执行完成后关闭这个命令窗口,“\\Processor(_Total)\% Processor Time“是性能计数器的路径名称。 3. 点击运行箭头或按下Ctrl+R键,即可获取到当前系统CPU占用率。在System Exec.Async.vi中还可以设置错误输出和进程退出的事件处理。 需要注意的是,使用System Exec.vi或System Exec.Async.vi函数需要获得管理员权限才能运行成功。此外,还可以在LabVIEW程序中使用Web Services、TCP/IP等网络通讯方式,通过Remoting或ActiveX等获得CPU占用率的数据,这种方法可实现远程监控CPU占用率。 ### 回答3: 在LabVIEW中,可以通过System Monitor Express VI来读取CPU占用。首先打开LabVIEW,然后在Block Diagram中从Functions菜单中选择System Monitor Express VI。这个VI可以监测系统的CPU占用率、硬盘空间、内存使用率等信息。 在使用System Monitor Express VI时,需要设置它的输出。在VI前面放置一个Indicator来显示CPU占用率。System Monitor Express VI的输出标签分别是CPU %、Disk %、Memory %、TCP %、UDP %、IO %等,选择CPU %即可。 使用System Monitor Express VI还可以监测CPU温度等信息。需要在VI前面添加一个Chart或Graph,然后将System Monitor Express VI的输出连接到Chart或Graph的输入上。这样就可以将CPU数据实时绘制在图表上,实现对CPU占用率的监测。 总之,使用LabVIEW中的System Monitor Express VI,可以很方便地读取CPU占用率。在应用程序的开发过程中,了解CPU占用率可以帮助开发者在保证程序运行的同时,尽可能减少CPU消耗,提高系统的运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值