同步和异步的区别

2023-11-07

同步

同指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

 

常用情况

同步问题多发生在多线程环境中的数据共享问题即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一特定时刻只能被一个线程所访问,如果使用异步,程序的运行结果将不可预料。因此,在这种情况下,就必须对数据进行同步,即限制只能有一个进程访问资源,其他线程必须等待

实现同步的机制

临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资 源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。

事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同步和异步的区别 的相关文章

  • vector 不是模板 报错解决

    目录 vector 不是模板 报错解决 嵌套vector 批量修改失败 嵌套vector 批量修改OK vector 不是模板 报错解决 list和vector在命名空间std里 因此只需要在vector前加std 即可 include
  • C++数组(数组定义方式、数组名作用、数组地址)

    文章目录 1 数组概述 2 一维数组 2 1 一维数组定义方式 2 2 一维数组数组名 2 2 1 一维数组名称的作用 2 2 2 一维数组名的2种特例情况 2 3 一维数组的地址 2 4 冒泡排序 3 二维数组 3 1 二维数组定义方式
  • Cpp学习——动态内存管理

    目录 一 new 1 malloc realloc calloc的使用不便之处 2 new的好处 3 opreator new 二 delete 1 为什么要有delete 2 为什么要匹配使用 一 new 1 malloc realloc
  • 何为智能指针以及QT中的智能指针

    目的 对于指针的使用中有两个导致软件崩溃的问题 一是忘记释放动态申请的内存 二是指针指向的内存被释放 为了解决这个问题 出现了智能指针 效果 智能指针其实是一个类 在这个类的构造函数和析构函数实现以下功能 当有一个指针指向对象A时 计数器加
  • vector中emplace_back和push_back详解,源码解读

    C 11之前 通常使用push back 向容器中加入一个右值元素 临时对象 的时候 首先会调用构造函数构造这个临时对象 然后需要调用拷贝构造函数将这个临时对象放入容器中 原来的临时变量释放 这样造成的问题是临时变量申请的资源就浪费 C 1
  • C++基础:for循环

    美好的知识点从出题开始 输出1 100所有的奇数 看到这道题 你可能有点懵 回顾标题 你找到办法了 但你不知道怎么写 来看看for循环的代码框架吧 for 控制变量初始化表达式 条件表达式 增量表达式 语句1 刚看到这 你肯定不太懂 我实际
  • 同步和异步的区别

    同步 同指一个进程在执行某个请求的时候 若该请求需要一段时间才能返回信息 那么这个进程将会一直等待下去 直到收到返回信息才继续执行下去 异步 是指进程不需要一直等下去 而是继续执行下面的操作 不管其他进程的状态 当有消息返回时系统会通知进程
  • C++项目:Json_parser

    我的json parser generator 我的json parsergenerator 我的json parsergenerator 功能简介 1 解析器部分 2 生成器部分 3 测试部分 部分实现 1整体框架 1json value
  • C++ 知识图谱

    在学习多年的c 后发现很多知识点非常零碎不够系统 借鉴看过的 c primer 做一下总结 方便自己学习 这个专栏的定位是具备c 基础的开发工程师 系统的总结c 知识 避免出现知识空白 并不会像书中那样非常详细的介绍每个特性和知识点 而只会
  • qt输出到控制台

    include
  • 【千律】C++基础:类的构造函数和初始化

    include
  • STL标准模板库学习笔记一(STL序列容器)

    目录 STL 容器 STL迭代器 array vector deque功能 list 和 forward list 功能 vector emplace back 和push back 的区别 vector插入函数insert和emplace
  • 【千律】C++基础:string扩展工具箱的使用方法

    include
  • 深拷贝构造函数和浅拷贝构造函数

    深拷贝构造函数和浅拷贝构造函数 拷贝构造函数有深拷贝构造函数和浅拷贝构造函数 分类 拷贝构造函数分为深拷贝构造函数和浅拷贝构造函数 区别 浅拷贝 即只复制对象空间 不复制对象资源 深拷贝 既复制对象空间又复制资源 由C 语言提供的默认拷贝构
  • c/c++时间类型

    1 time t time t 类型 这本质上是一个长整数 表示从1970 01 01 00 00 00到目前计时时间的秒数 如果需要更精确一点的 可以使用timeval精确到毫秒 time t cur time NULL 2 struct
  • 【千律】C++基础:类定义和类实现的分离

    类定义就是指定义类名 是 h文件 类实现是指对类定义的具体实现 是 cpp文件 下面是Student h中的内容 pragma once include
  • C++杂谈 inline关键字

    1 inline 用于把函数指定为内联函数 且该关键字需要与函数定义放在一起 与函数声明放在一起没有效果 2 内联函数一般只适用于比较精简的小函数 实际上内联函数是通过牺牲空间去换取时间上的效率 如果函数过于庞大会造成大量空间的浪费 所以需
  • C++四种类型转化

    文章目录 static cast const cast reinterpret cast 重新解释 dynamic cast static cast 该运算符把expression转化为type name类型 static cast在编译时
  • STL标准模板库学习笔记三(STL哈希容器)

    关联式容器 排序 的底层实现采用的树存储结构 更确切的说是红黑树结构 无序容器 哈希 的底层实现采用的是哈希表的存储结构 基于底层实现采用了不同的数据结构 因此和关联式容器相比 无序容器具有以下 2 个特点 无序容器内部存储的键值对是无序的
  • 【千律】C++基础:打开并下载网页 -- ShellExecuteEx 和 URLDownloadToFile 函数

    include

随机推荐

  • CGAL功能大纲

    CGAL功能大纲 Computational Geometry Algorithms Library CGAL 计算几何算法库 使用C 语言编写的 提供高效 可控的算法库 广泛应用于计算几何相关领域 如地理信息系统 计算机图形学 计算机辅助
  • sonarqube安装

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 下载 下载地址 https www sonarqube org 2 Linux安装 解压 sonarqube zip 进入sonarqube 7 1 bin linux x86
  • jpa简介

    一 JPA是什么 1 JPA简介 JPA是Java Persistence API的简称 中文名Java持久层API 是JDK 5 0注解或XML描述对象 关系表的映射关系 并将运行期的实体对象持久化到数据库中 2 JPA 提供商 Hibe
  • 求最大公约数和最小公倍数的方法

    一 求最大公约数 1 辗转相除法 最推荐 不用管a b谁大谁小 如果b大 经过一次循环 a b会交换位置 include
  • html和js的学习

    链接如下 html https www runoob com html html attributes html js https www runoob com js js tutorial html
  • Gradle系列

    gradle idea使用 Gradle的使用教程 https blog csdn net qq 22172133 article details 81513955 原文网址 https www jianshu com p 46e7a916
  • Android强大的原生调试工具adb的常用命令

    文章目录 ADB简介 常用命令 列出链接的设备 进入设备的shell环境 设备日志 安装应用程序 卸载应用程序 将本地文件复制到调试设备上 将设备上的文件拉取到本地 启动程序 强制停止程序运行 截图 屏幕录制 列出调试设备所有的应用的报名
  • 说说数据一致性有哪几种?

    分析 回答 一般来说 数据一致性模型可以分为强一致性和弱一致性 强一致性也叫做线性一致性 除此以外 所有其他的一致性都是弱一致性的特殊情况 弱一致性根据不同的业务场景 又可以分解为更细分的模型 不同一致性模型又有不同的应用场景 强一致性 当
  • ETest_Tester-装备外场试验综合测试仪

    1 产品简介 装备外场试验综合测试仪ETest Tester是用于各行业装备软件研发 测试部门或者质量管理部门外场装备测试的综合测试设备 该设备由硬件和软件两部分组成 硬件采用全封闭 无风扇铝合金结构 嵌入式X86架构主板 软件部分包括操作
  • 苦逼的是怎么又有东西没记住,但我们依然每天坚持一遍、一遍又一遍指导记住为止。

    期待的是可以检验自己学习的成功 苦逼的是怎么又有东西没记住 但我们依然每天坚持一遍 一遍又一遍指导记住为止 原本以为大家会把讲过的都记录下来 以便日后毕业复习 事实证明18岁的我还是太年轻 一切想象的太美好 三番五次督促整理到自己笔记上 可
  • python基础—图形开发

    python基础 图形开发 python图形界面开发 认识tkinter模块 窗体的基本设置方法 几何布局管理器 pack布局管理器 grid布局管理器 place布局管理器 使用tkinter设计计算器程序 Python事件处理 常用tk
  • C++11实现的数据库连接池

    它什么是 数据库连接池负责分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是再重新建立一个 类似的还有线程池 为什么要用 一个数据库连接对象均对应一个物理数据库连接 每次操作都打开一个物理连接 使用完都关闭连接
  • markdown使用文档(Typora 快捷键)

    markdown 更简洁 更高效 强烈建议开发者认真阅读本文档 掌握md及HBuilderX对md的强大支持 窄屏幕下 可按Alt 滚轮横向滚动 很多人只把markdown用于网络文章发表 这糟蹋了markdown markdown不止是H
  • 对numpy.c_的理解

    文章目录 文档描述 关于python科学计算 pandas numpy 中axis 轴 的理解 理解 文档描述 来自官方文档的叙述 这里只简单翻译一部分 numpy c numpy c
  • Python 7.OpenCV 获取执行时间 抠图添加到另一个图、按位运算

    与运算 对掩膜的白色区域保留 黑色区域去除 非运算 取反运算 黑变白 白变黑 import cv2 import numpy as np from matplotlib import pyplot as plt img1 cv2 imrea
  • 1.4 新倚天屠龙之Java传--夜谈Java的运行

    黑夜迅速从地球另一端弥漫而来 重新又笼罩起了这块孤独的荒岛 但是冰火岛中这一束火光打破了这无边的寂寥 带了了一丝丝温馨 张翠山夫妇和谢逊 还有这便宜儿子Neo吃起了简陋的篝火晚餐 虽然只有烤鱼跟野菜汤 但是因为殷素素的精心准备还是比较可口的
  • Apache log4j2远程代码执行漏洞复现

    Apache Log4j2远程代码执行漏洞 声明 漏洞描述 漏洞影响范围 漏洞复现 验证工具 JNDI注入 JNDI注入原理 jndi注入的利用条件 复现过程 深度利用 反弹shell 防御措施 缓解措施 声明 首先声明一下 图片上有Fre
  • input框输入实时检测校验

    1 只能输入英文 数字且必须以英文开头
  • 黑马程序员并发笔记-juc并发以及锁原理-总集篇-结合自己的思考和心得完整版

    黑马程序员并发编程笔记 一 进程的概念 黑马程序员并发编程笔记 二 java线程基本操作和理解 java并发编程笔记 三 管程 一 java并发编程笔记 三 管程 二 java并发编程笔记 三 管程 三 java并发编程笔记 三 管程 四
  • 同步和异步的区别

    同步 同指一个进程在执行某个请求的时候 若该请求需要一段时间才能返回信息 那么这个进程将会一直等待下去 直到收到返回信息才继续执行下去 异步 是指进程不需要一直等下去 而是继续执行下面的操作 不管其他进程的状态 当有消息返回时系统会通知进程