
并发是许多问题的基础. 这是流程和线程管理的核心问题. 并发是编程中非常重要的问题. 但是同时,理解并发编程和理解面向对象一样困难. 如果您想了解他,那将是一条艰难的路.
任何事情在任何时候都只能执行一个步骤,也就是说,顺序编程既简单又基本. 但是对于某些复杂的问题,并行执行既方便又必要.
操作系统的核心问题是进程和线程的管理. 在不同情况下,存在诸如单处理系统,多处理器系统和分布式计算机系统之类的过程. (要做: 与JAVA相关的描述放在这里. )并发问题不仅涉及内存,文件和I / O访问中的资源,还涉及集合的处理和进程通信.
并发提高了处理器资源的利用率. 了解并发性有助于编写更好,更快的程序. 如果要更好地执行网络编程,GUI编程,事件驱动的编程,功能编程,并了解一些常见的软件体系结构(基于消息的体系结构),分布式系统,则需要对并发问题有一个完整的了解. 在语言中使用集合框架还需要了解并发问题. 现在有专门的并发语言(例如,像Go,erlang这样的语言本机支持并发). 此外,并发还可以帮助我们创建更松耦合的设计.
但是请记住,并发并不是完美的,也不容易使用(实际上很困难). 并发需要额外的成本(包括复杂性成本,资源开销成本)来维护;该程序的关闭状态在并发环境中被破坏. 并发请求的数量越少越好. 并发请求的数量必须合理,并且CPU需要具有足够的处理能力. 如果没有任务,它将阻止并发的使用,而会带来一系列不必要的开销,例如上下文切换.
并发和并行
待办事项: 其他说明
并发是指在一定时间内交替处理多个任务的能力. 每个进程执行一段时间后,它会记录工作状态,释放资源并等待,并允许其他进程抢占CPU资源.

并行是指同时处理多个任务的能力. CPU已发展为多个内核,可以同时执行彼此独立的多个指令和执行块.
并发性和并行性之间的核心区别是进程是否同时执行,它们都是为了尽可能快地执行所有任务. “并行”概念是“并发”概念的子集. 因此,解决单个问题时涉及多个执行过程的任何编程模式或行为都属于并发编程.
给出以下参考信息是为了了解并发性和并行性:
参考文献1: 一个部门的两名专家同时坐在同一位置,这是两个并行的任务. 其中一位医生有时会要求诊断,有时会检查检查清单,然后继续进行咨询,并突然中断了对患者的咨询. 这是并发.
参考文献2: Erlang的父亲Joe Armstrong用一张5岁的孩子可以理解的图表解释了并行性和并行性之间的区别. 在下图中,两个队列交替使用一台咖啡机,两个队列并行使用两台咖啡机.
待办事项: 咖啡平行图
进程并发和线程并发
在某些系统中,并发实体是线程而不是进程(JAVA的并发实体是线程Thread). 使用线程的优点是代码无需关注代码是否在一个或多个cpu机器上运行,因此添加一个cpu可以轻松地加快程序的运行速度.

在进程之间共享数据的大多数方式都需要复杂的实现(IPC),而线程之间共享代码和地址空间,并且共享数据的方式更加有效. (进程需要考虑隔离. 一个进程不能直接访问另一个进程;线程不需要隔离,线程共享内存. )
todo: 信号是在进程还是线程上? ?他们都应该吗?进程并发和线程并发的不同实现
并发设计问题
待办事项: 添加其他问题的示例
生产者/消费者问题,读者/作家问题.
并发是进程(或线程)之间交互的问题. 并发情况很多. 在不同执行模式下的并发和在流程交互级别下的并发将具有不同的性能,这将在下面讨论.
替代和重叠执行模式
在单处理器多程序系统中交替执行进程,在多处理器中交替执行和重叠进程. 其中,进程的相对执行速度是不可预测的(执行速度取决于其他进程的活动,操作系统的中断处理方法以及操作系统的调度策略),这引起了许多问题:

全局资源共享的危险(全局变量的读取和写入执行顺序不同),操作系统很难优化资源分配. 定位编程错误非常困难. 很难调试同时执行进程的情况(并行问题,仅在多个Processor中出现)
请考虑以下代码和分析示例:
待办事项: 单处理器多处理器图
在单处理器上,进程可以在任何地方停止指令的执行,而多处理器也可以同时执行两个进程,并尝试访问相同的全局变量. 解决此问题需要控制对共享资源的访问,一次只允许一个进程.
流程交互
待办事项: 教科书中表格5.2的屏幕截图
竞争进程之间存在资源竞争: 当每个进程竞争使用同一资源时,就会发生冲突,并且每个进程仅访问资源(只读),而不会修改资源. 这种情况需要访问互斥锁(读取). 通过锁定资源,可以使用锁定机制来解决该问题.
共享合作过程可以访问相同的共享变量,共享文件或. 一个进程可以在不涉及其他进程的情况下访问或修改共享变量(读和写),但是知道其他进程也可以访问相同的数据. 它只需要确保互斥量被修改(写),但是需要一个新的控制要求: 数据一致性(待办事项: 工程图示例). 在这种情况下,关键部分的概念非常重要,单个句子的相互排斥不再满足需要,

待办事项: 工程图示例
通信合作过程不需要相互排斥peterson算法忙等待,因为它们不共享对象,但是仍然存在僵局和饥饿. 这两个过程在接收到彼此通信的语句上都被阻塞,并且发生死锁(待办事项: 绘制示例). 饥饿现象(待办事项: 绘制示例)
并发实现带来很多控制问题,其中三个主要控制问题是: 互斥,死锁,饥饿以及其他控制问题,例如数据一致性.
待办事项: 在此处控制问题地图
并发的核心问题是资源的互斥要求. 有多种方法可以实现互斥(硬件和软件方法). 互斥还需要注意诸如忙碌等待之类的问题.
相互排斥技术可用于解决冲突,例如注入资源的争用,还可用于同步过程.
相互要求
互斥方法:
专用机器指令,开销较小,但不通用. (硬件支持)操作系统或编程语言提供一定程度的支持. (软件方法: 操作系统和编程语言的支持)进程承担实现互斥的责任. 这是一种软件方法,会增加开销并存在缺陷. (软件方法: 过程承担责任)
其中,方法1的几种实现方式包括禁止中断和专用机器指令. 信号量,管理和消息传递的两种方法;方法3的几种实现包括Dekker算法peterson算法忙等待,Peterson算法和竞争. 条件,信号量等. 这些方法的详细说明将在下一篇文章中概述.
触发其他进程的行为原子操作Spinlock信号量屏障操作系统-本质和设计原则(第八版)第5章高效编码: Java开发人员手册的第7章并发Java JAVA编程思想第四版第21章
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-161287-1.html
已举报
二小时灭中国东海舰队
打可以但是is玩完了