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

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

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

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

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

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

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

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

  • 相关阅读:
    cookie
    sql 语句
    页面宽高
    分页
    asp.net中如何防止用户重复点击提交按钮
    小试简单工厂模式之简单计算器
    用函数实现交换的疑问
    结构体变量输入输出的问题
    scanf函数输入float数需要注意的问题
    oracle学习手记(1)
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2835992.html
Copyright © 2011-2022 走看看