为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:43   227   0
<div class="rich_media_content" id="js_content">
<p><img alt="640?wx_fmt&#61;jpeg" class="rich_pages" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-f9b64041e3ca9fecdd48be8ac6a8b674"><br></p>
<p> </p>
<p></p>
<div>
  <br>
</div>
<div>
  <strong>作者:</strong><strong> dog250</strong>
</div>
<div>
  <strong>链接:</strong><strong>https://blog.csdn.net/dog250/article/details/96362789</strong>
</div>
<div>
  <strong><br></strong>
</div>
<div></div>
<div></div>
<div>
  先说是不是,再问为什么。
  <br>
</div>
<p><br></p>
<div>
  我就知道有人会这么说,然而那样就成了一篇议论文了,而我只是想写一篇随笔。所以,不管事实是不是那样,反正我就是觉得Windows,MacOS,iOS都很流畅,而Linux,Android却很卡。当然了,这里说的是GUI,如果考量点换成是Web服务的吞吐和时延,那估计结论要反过来了,不过那是客户端程序感觉到的事,作为人,who cares!
</div>
<p><br></p>
<div>
  我写这篇文章还有一个意思,那就是想牵引一个话题,如果我们想把Linux,Android(当然,Android内核也是Linux)优化到GUI不再卡顿,我们应该怎么做。
  
</div>
<p><br></p>
<div>
  大概是去年,一个炎热的午后,吃过午饭我和同事们在公司附近晃悠,就讨论 <strong>“为什么苹果手机就不卡,安卓手机不管多贵都很卡。</strong><strong>” </strong>记得一位同事说,iOS在GUI方面做了很多的优化,而Android却没有。
</div>
<p><br></p>
<div>
  这话说对了!不过更为重要的一点是, <strong>不谈具体场景谈优化,都是瞎折腾!</strong>
</div>
<p><br></p>
<div>
  Windows也好,iOS也好,都知道自己的应用场景,因此针对自己的应用场景做了优化之后,妥妥在自己拿手的场景下甩Linux在该场景下的表现几条街了。
</div>
<p><br></p>
<div>
  下面开始正式的技术层面的分析之前,先声明几点。
</div>
<p><br></p>
<ul class="list-paddingleft-2"><li><p>本文并不是在说Linux系统总体上很卡顿,而只是说Linux系统桌面版的GUI程序相比Winddows很卡顿,如果真觉得本文是在喷Linux,那就当是喷Linux桌面的吧。</p></li><li><p>本文不准备讨论X window和Windows窗口子系统一个在用户态一个在内核之间的差异,这无关紧要。我的想法是,即便是你将X window扔进内核,现有的Linux内核处理GUI,该卡顿还是卡顿。</p></li><li><p>本文仅从调度算法的角度来评价为什么Windows/iOS不卡顿而Linux却卡顿,当然还有别的视角,但并不是本文主题。</p></li><li><p>Windows内核调度的线程而不是进程,但是本文统一采用进程这个术语,没有别的原因,只是因为进程的概念是和现代操作系统概念相始终的,而线程是后来的概念。</p></li></ul>
<p><br></p>
<div>
  先看服务对象,仅此就将Windows,MacOS/iOS和Linux的使用场景区分开来:
</div>
<p><br></p>
<ul class="list-paddingleft-2"><li><p>Windows/MacOS/iOS系统,主要是被人操作,用来提供写文档,游戏,做报表,画图,上网浏览,视频播放等服务。</p></li><li><p>Linux系统,主要提供网络服务,用来支撑各种远程的客户端,为其提供数据处理和查询,数据生成,数据存储等服务。</p></li></ul>
<p><br></p>
<div>
  事实证明,Linux在其专业的领域已经做的足够好,但是问题是,为什么它在GUI处理方面却总是一直很糟糕呢?这就要看具体场景的差异了。
</div>
<p><br></p>
<div>
  对于网络服务而言,其场景的行为是<strong> 可预期的</strong> ,我们可以将这些场景简单归结为:
</div>
<p><br></p>
<ul class="list-paddingleft-2"><li><p>公平快速处理网络并发请求。</p></li><li><p>公平快速处理并发磁盘IO。</p></li><li><p>高吞吐CPU密集型数据处理与计算。</p></li></ul>
<p><br></p>
<div>
  Linux优秀的O(1) O(1)O(1)调度器以及后来的CFS调度器可以非常完美的cover上述三个场景,至于说为什么,不必多说,简单归纳如下:
</div>
<p><br></p>
<ul class="list-paddingleft-2"><li><p>无论是O(1) O(1)O(1)的基于优先级的时间片轮转还是CFS的基于权重的时间配额,均可以既满足优先级的差别服务需求又保证高吞吐率,这些都来自于调度器本身而不是依靠频繁的切换。</p></li><li><p>额外的简单启发式奖惩机制可以让网络IO以及磁盘IO的响应度更高,同时又不影响CPU密集型计算服务的高吞吐。</p></li></ul>
<p><br></p>
<div>
  上面的第二点是一个额外的辅助,照顾IO过程快速获得响应,这是一个非常棒的辅助,但是
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP