并发编程基础
并发编程的思想来自多任务(多元)操作系统,多任务操作系统允许同时运行多个程序.当一个程序暂时不需要cpu的时候,系统会把改程序挂起或中断,已使其他程序可以使用cpu.
串行程序与并发程序
一个串行程序指一个只能被顺序执行的指令列表,而一个并发程序则是被并发的执行的两个或两个以上的串行程序的系统.并发程序允许其中的串行程序运行在一个或多个CPU上,同时也允许每个串行程序都运行在专为它服务的CPU上.前一种方法称为多元程序.多元程序由操作系统内核支持并提供多个串行程序复用多个CPU的方法,称为多元处理.多元处理是指计算机中的多个cpu公用一个存储器(即内存),并且在同一时刻可能会有数个串行程序分别运行在不同的CPU上.
并发程序与并行程序
并发程序是指可以被同时发起执行的程序,而并行程序是被设计成可以在并行的硬件上执行的并发程序,换句话说,并发程序代表了所有可以实现真正的或可能的并发行为的程序,是一个宽泛的概念,这其中包含了并行程序,并行程序是并发程序中的一种.
并发程序与并发系统
并发程序属于程序,即使被分为许多部分,只要这些部分之间是紧密地关联在一起的,并且可以被看作一个概念上的整体,那么它就属于一个程序.另一方面,程序与程序之间可以通过协商一致的协议进行通讯,并且他们是松耦合的,它们可以被看做是一个系统,而不是程序,并发程序和并发系统中的并发的含义一致,但是并发系统更有可能是并行的,因为其中多个程序一般可以同时在不同的硬件环境上运行,因此并发系统也被称为并行系统.
并发程序的不确定性
串行程序中的所有活动的先后顺序都是固定的,而一个并发程序中的活动只是部分有序的,也就是说其中一些活动的发生顺序并没有确定的指定,这一特性被称为不确定性,这种不确定性导致并发程序的每次运行的活动执行路径都是不同的,即便是在输入数据相同的前提下.
并发程序内部的交互
并发程序能不被划分成多个部分,每个部分都可以被看作是一个串行程序.在这些串行程序之间可能存在交互的需求,如:多个串行程序可能都要对一个共享资源进行访问,又如,它们需要相互传递数据.在这种情况下,就需要协调它们的执行,这就涉及到同步.同步的作用是避免在并发访问共享资源时可能存在冲突,以及确保在互相传递数据时能够顺利地接通.
根据同步原则:程序如果想要使用一个资源,就必须先请求该资源获取对他的访问权,不需要某个资源,应该释放资源,即放弃对它的访问权.一个程序对资源的请求不应该导致其他正在访问该资源的程序中断.而应该等到那个程序释放该资源之后再进行请求.在同一时刻,某个资源应该只被一个程序占用.
传递数据是并发程序内部的另一种交互方式.它被称为程序内部的通讯.协调内部通讯方式可以同步亦可以异步.异步这种方式使得数据可以不加延迟的发送给数据接收方,即使在数据接收方还没有立即为接收该数据做好准备的时候,也不会造成数据发送方的等待.数据会被临时存放在一个被称为通讯缓存的数据结构中.通讯缓存是一种特殊的共享资源.它可以同时被多个程序使用.数据接收方可以在准备就绪之后按照数据被存入通讯缓存的顺序从通讯缓存中接收他们.
浙公网安备 33010602011771号