首页 > 其他分享 >并发与同步

并发与同步

时间:2023-08-15 21:32:18浏览次数:34  
标签:同步 互斥 管程 并发 进程 共享 signal

进程间的作用

  • P、V操作不能实现共享
  • PV操作不足
  • 不易读懂
  • 不利于修改和维护
  • 正确性难以保证
  • 可以用于线程tm的

进程间的同步

  • 同步:一个进程在等待另一个进程给它发送消息 一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定速度执行的过程称为进程间的同步

 

进程间的互斥

  • 解决进程互斥的方法:
  • 竞争各方平等协商
  • 设置进程管理者

 

管程

概念及组成

管程内使用的对象是,共享数据结构、一组操作过程

通过连接两个进程的一个打开的共享文件,可以实现进程间的数据通信

  • 主要特性
  • 管 程 中 的 共 享 变 量 在 管 程 外 部 是 不 可 见 的 , 外 部 只 能 通 过 调 用 管 程 中 所 说 明 的 外 部 过 程 ( 函 数 ) 来 间 接 地 访问 管 程 中 的 共 享 变 量 ,
  • 任 一 时 刻 管 程 中 只 能 有 一 个 活 跃 进 程 , 规 定 管 程 互 斥 进 入 ,
  • 管 程 通 常 是 用 来 管 理 资源 的 , 在 管 程 中 应 当 设 有 进 程 等 待 队 以 及 相 应 的 等 待 及 唤 醒 操 作 。
  • 管 程 是 编 程 语 言 的 组 成部 分 , 可 以 米 用 与 其 他 过 程 调 用 不 同 的 方 法 来 处 理 对 管 程 的 调 用 。
  • 进 人 管 程 时 的 互 斥 由 编译 器 负 责 , 通 常 是 用 一 个 互 斥 量 或 二 元 信 号 量 。
  • 一次只能由一个进程可以在管程中活动
  • 管程的互斥是由管程本身性能决定的,不是PV
  • 管程可以实现互斥,但无法保证互斥

条件变量

  • 引 入 条 件 变 量 以 及 相 关 的 两 个 操 作 wait 和 signal 其 目 的 是 进 程 在 无 法 继 续 运 行 时 调 用 进 程 自 身 阻塞。
  • 当 一 个 管 程 过 程 无 法 继 续 运 行 时 , 会 在 某 个 条 件 变 量 ( 如 fu 围 上 执 行 wait 操 作 , 导 致 调 用 进 程 自 身 阻 塞 , 并 且 还 将 另 一 个 以 前 等 在 管 程 之 外 的 进 程 调 入 管 程 。
  • 另 一 个 进 程 可 以 唤 醒 正 在 睡 眠 的 伙 伴 进 程 , 可 以 通 过 对 其 伙 伴 正 在 等 待 的 一 个 条 件 变 量 执 行 signal 完 成 。
  • P 等 待 Q 继 续 , 直 到 Q 退 出 或 等 待 (Hoare 提 出 )。
  • Q 等 待 P 继 续 , 直 到 P 等 待 或 退 出 。
  • 规 定 唤 醒 为 管 程 中 最 后 一 个 可 执 行 的 操 作(BrinchHansen 提 出 ) 。

 

  • Pthread中的互斥与同步
  • Pthread_join函数是等待一个特定的线程退出
  • 消息缓冲通信机制
  • 管道方式的缺点通信速度慢
  •  共享内存适合大量传送信息

标签:同步,互斥,管程,并发,进程,共享,signal
From: https://blog.51cto.com/u_15763679/7094077

相关文章

  • 并发和GIL
    并发和GIL参考博客:Python的多进程和多线程Python中协程、多线程、多进程、GIL锁基于线程的并行基于进程的并行基础知识并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配......
  • 高效爬虫策略:利用HTTP代理实现请求合并与并发
    身为一名专业的爬虫程序员,我要跟大家分享一个超实用的技巧,就是怎么利用HTTP代理来实现高效的爬虫策略,同时实现请求合并和并发。听起来是不是就高端大气上档次?我给你们详细说说,让你们秒懂怎么搞定这玩意儿。首先,我们要理解一下为什么要用HTTP代理来实现这个高效策略。当......
  • Java并发编程:实现高效、线程安全的多线程应用
    Java并发编程是开发高效、可扩展的多线程应用的关键。合理地利用多线程可以提高程序的性能和响应性,但同时也会引入线程安全的问题。本文将介绍Java并发编程的关键技巧,帮助读者实现高效、线程安全的多线程应用。 线程安全的数据结构和类Java提供了许多线程安全的数据结构和类,如Co......
  • 数据库中,并发带来的问题
    脏读一个事务读取数据,并且对数据做了修改,这个i需改对其他事务来说是可见的,即使当时没有提交,这时另一个事务读取了这个还未提交的数据,但是第一个事务没成功,发生了回滚,导致数据并没有被提交到数据库,那么第二个事务读到的就是脏数据说白了就是一个事务读取了另一个事务1还未提交的......
  • 实战:工作中对并发问题的处理 | 京东物流技术团队
    1.问题背景问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。分拣业务针对每个快递包裹都会生成一个任务,我们称它为task。task中有两个字段需要关注,一个是分拣中发生的异常(exp_type),另一个是分拣任务的状态(status)。另外,需要关注分拣状态上报接口,通过......
  • 实战:工作中对并发问题的处理
    1.问题背景问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。分拣业务针对每个快递包裹都会生成一个任务,我们称它为task。task中有两个字段需要关注,一个是分拣中发生的异常(exp_type),另一个是分拣任务的状态(status)。另外,需要关注分拣状态上报接口,通......
  • 使用Logstash同步Mysql到Easysearch
    从Mysql同步数据到ES有多种方案,这次我们使用ELK技术栈中的Logstash来将数据从Mysql同步到Easysearch。方案前提Mysql表记录必须有主键,比如id字段。通过该字段,可将Easysearch索引数据与Mysql表数据形成一对一映射关系,支持修改。Mysql表记录必须有时间字段,......
  • 高并发数据抓取实战:使用HTTP爬虫ip提升抓取速度
    又到每天一期学习爬虫的时间了,作为一名专业的爬虫程序员,今天要跟你们分享一个超实用的技巧,就是利用HTTP爬虫ip来提升高并发数据抓取的速度。听起来有点高大上?别担心,我会用通俗易懂的话来和你们说,让你们秒懂怎么操作的。首先,咱们得理解一下为什么HTTP爬虫ip可以加速数据抓取。抓取数......
  • 使用Logstash同步Mysql到Easysearch
    从Mysql同步数据到ES有多种方案,这次我们使用ELK技术栈中的Logstash来将数据从Mysql同步到Easysearch。方案前提Mysql表记录必须有主键,比如id字段。通过该字段,可将Easysearch索引数据与Mysql表数据形成一对一映射关系,支持修改。Mysql表记录必须有时间字段,以支持......
  • 学习go语言编程之并发编程
    并发基础并发包含如下几种主流的实现模型:多进程多线程基于回到的非阻塞/异步IO协程协程与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”,可以轻松创建上百万个而不会导致系统资源枯竭,而线程和进程通常最多不超过1万个。Golang在语言级别支持协程,叫goroutine。......