zoukankan      html  css  js  c++  java
  • 同步,异步

    举例来说:程序员做蛋糕,可以分为以下几个线程:添加水,添加面粉,混合原料。添加水和添加面粉可以异步,因为二者没有先后顺序。添加水和混合原料,添加面粉和混合原料必须同步(这里假定必须水和面粉添加好了,才能混合原料)。

    假设只有程序员一个人,一会添加水,一会添加面粉,会降低效率(频繁地切换上下文),最好的做法是把水添加好了,再添加面粉,但是这不符合实际情况。程序员不能同时添加水和添加面粉,增加一个人可以显著提高效率。也就是说,对于异步的情况,可以增加CPU提高执行速度。但是对于同步的情况,增加CPU不起作用,因为有再多的CPU的也没用,必须等待前一个步骤完成。

    可以异步的情况:两个步骤没有先后顺序,可以随时的切换(单个CPU),或者同时进行(多个CPU)。

    必须同步的情况:两个步骤有先后顺序,必须前一个步骤完成,才能进行下一个步骤。

    如果要想通过增加CPU提高执行速度,必须把一个任务分解成互不干扰的步骤。Google的MapReduce本质上就是这样。

    可以异步的情况下,如果有多个CPU,采用异步当然提高效率。但是如果只有一个CPU,采用异步会降低效率,因为频繁切换上下文耗资源,但是为什么还采用异步呢?

    举例来说,我想一边打游戏一边听歌,当然不能忍受游戏打完了,才能听歌。那么一个CPU必须在游戏程序和播放歌程序之间不停的切换,由于切换的时间非常短,用户实际上感觉不到切换。事实上,一个CPU在任何时刻只能做一件事。

  • 相关阅读:
    Android在layout xml中使用include完成静态加载
    ImageSwitch图像切换控件
    合并石子大总结
    子矩阵(暴搜(全排列)+DP)
    回路(一笔画问题)
    道路重建(记忆化搜索+贪心)
    【NOIP2013 普及组】车站分级
    UML的基本关联
    Matlab画图-非常具体,非常全面
    面向对象程序设计与面向过程程序设计解析
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2835992.html
Copyright © 2011-2022 走看看