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

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

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

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

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

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

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

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

  • 相关阅读:
    AVL Trees & Huffman Tree
    线索二叉树
    w10 端口转发
    springboot 注解属性配置
    java 性能分析工具
    JAVA
    ffmpeg ffplay播放延时大问题:播放延时参数设置
    springboot jodconverter openoffice 实现 office 文件 在线预览
    oracle 字符串 正则表达式 拆分,排序,合并
    润乾填报-(自定义)自动计算
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2835992.html
Copyright © 2011-2022 走看看