关于CPU利用率和多线程开发

z86870530 2016-06-07 10:00:52
cpu在类似于播放视频读取文件是否在一直计算(占用)?
例如我在播放电影同时做别的操作,那么我在播放电影时CPU是否一致在占用,如果没有占用,那么播放电影的功能是播放器自己读取视频文件?如果cpu被播放程序占用,那么其他线程用CPU时(时间片?)是不是要抢占cpu的控制权,但是这样交替执行,实际CPU的执行总时间是一定的,怎么会提高性能?
多线程我知道可以使多次提交不堵塞,但是对于CPU的“空闲时间”“效率”以及“读取文件时不占用cpu”这些方面还不甚了解,
我觉得只有了解这些CPU的运行原理才能准确把握什么时候用多线程等以提高cpu的使用效率
请帮解答一下如果利用多线程充分利用CPU
...全文
267 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2016-06-23
  • 打赏
  • 举报
回复
“cpu在类似于播放视频读取文件是否在一直计算(占用)?” 答案是:从宏观来说是的,但实际肯定不是一直占用。打开音频/视频文件就一直没有关,只是会读一部分到内存中做缓冲。 去测试 CPU 使用会发现,CPU 使用率会一直有,但不高(这是宏观的表现);但从源代码分析,肯定其中存在 CPU 轮转,如:Sleep、或者其它。
hd378 2016-06-22
  • 打赏
  • 举报
回复
前面的回答已经说的比较详细了,我再补充一些,具体到这个场景: “cpu在类似于播放视频读取文件是否在一直计算(占用)?” 答案是:不是。 在视频播放和音频播放这样的场景中,大量的时间其实是花在IO操作和DMA传输上了,所以CPU占用率并不是太高。 你可以简单验证下,PC机中,你播放一个视频,然后监视CPU占用率,你会发现其实没多少。基于ARM的构架也是类似的情况。 因为播放视频时,主要流程是 :从存储器中读取视频文件,通过DMA操作将文件数据传输到内存,解码,通过DMA将数据传输到显示控制器显示。大家知道DMA过程是不需要CPU参与的,而解码过程,如果是硬件解码的话,CPU也很少参与,(所以软件解码的话CPU占用率就会比较高),所以说整个过程其实IO占用的时间是比较多的(不管是读取文件IO,还是把数据送到显示控制器的IO),但由于IO过程是用DMA方式操作的,所以CPU不用管,所以CPU大部分时间空闲,可以去执行别的任务。这就是为什么播放视频音频时CPU占用率其实并不高。
jdygrdzh 2016-06-08
  • 打赏
  • 举报
回复
要想完全搞清楚为什么,需要去大点的做芯片的公司,海思之类的,不过也要做核心岗位才有机会全面了解。或者到ARM中国也可以,相关知识光文档和PPT就有10G。其他地方不清楚能不能学到。
jdygrdzh 2016-06-08
  • 打赏
  • 举报
回复
这个问题不能从软件入手,需要知道芯片里面干了什么,得从硬件入手。以手机举例: 放视频,视频控制器是从内存数据块链读取内容,解码,送到显示控制器。 图形界面,GPU是从内存数据块链读取内容,合成,送到显示控制器。 显示控制器把从GPU和视频控制器送来的数据混合,输出,或者继续送给GPU做旋转等操作,然后GPU重新送给显示控制器。所有的步骤都是从内存数据块链读取或者写入内容。内存是中介。 CPU上驱动的工作是把数据分块,组成链,把基地址告诉各个控制器,并让他们处理。GPU复杂些,CPU先要动态解释命令,然后送给GPU。整个过程内存也是中介。 如果数据的源头来自文件,进过CPU驱动层层解析,闪存控制器读取数据块,送到内存供视频控制器读取。 上面这些事,你可以写一个单线程做完,也可以多线程做,分布到不同的CPU。既可以中断触发也可以轮询,不过一般是中断。 手机上把握使用率,那不是手工干的,是有ITS/IPA/EAS或者调度软件根据大小核的热模型来推导出哪个核或者那几个核干最省电。 不知是否解释了你的疑惑。
z86870530 2016-06-08
  • 打赏
  • 举报
回复
引用 3 楼 jdygrdzh 的回复:
其它的还可以学到的知识包括处理器微结构,总线,各类中断控制器,内存控制器,系统MMU,各类接口协议,芯片系统设计和优化,虚拟化,安全系统设计,图形处理器微结构,图像处理器,视频处理,系统软件,软件调度,前端设计,后端设计,制程和工艺等。 但是等你学完了一遍会发现一切才是一个开始,每个方向都有各类牛人完虐你,你只是学习而他们是创造。此时你已经三十多了,茫然四顾,不知道可以干嘛。所以三思啊同学,不如立刻放弃就好,退一步海阔天空。
------------------ very thanks 我个人比较喜欢底层一些,现在从事软件编程,在做多线程时引申出来这些思考,转硬件我一般不会,已经而立之年了 我其实初衷是想了解cpu处理多线程的中断“时间片”方面的机制,想了解cpu在交替处理线程时什么时候如何利用率最大 所以就想到cpu是不是一直在工作和具体干那些工作例如播放视频是不是一直在读取视频文件IO还是指明视频文件(或内存)地址将控制权交给图形设备?其实是想 了解计算机cpu的工作流程和功能由此可以编程cpu最大利用率和处理高并发问题 硬件,我挺感兴趣的,我始终认为硬件是平台基础实实在在的东西,但是现在夸进去几乎不可能了 时间精力等等都不允许 如果你的回复不是复制粘贴想必也从业很久了吧? 我这边结合硬件的功能性能,能用软件调用就可以了。 你的解释让我了解不少运作原理
jdygrdzh 2016-06-08
  • 打赏
  • 举报
回复
其它的还可以学到的知识包括处理器微结构,总线,各类中断控制器,内存控制器,系统MMU,各类接口协议,芯片系统设计和优化,虚拟化,安全系统设计,图形处理器微结构,图像处理器,视频处理,系统软件,软件调度,前端设计,后端设计,制程和工艺等。 但是等你学完了一遍会发现一切才是一个开始,每个方向都有各类牛人完虐你,你只是学习而他们是创造。此时你已经三十多了,茫然四顾,不知道可以干嘛。所以三思啊同学,不如立刻放弃就好,退一步海阔天空。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧