概述
并发编程:是一种现代计算机编程技术。可以是多进程编程、多线程编程、还可以是编写分布式程序。
主要思想
并发这个概念由来已久,其主要思想是:使多个任务可以在同一时间段内执行,以便能够更快地得到结果。
并发编程的思想来源于多任务操作系统,它允许同时运行多个程序。在早期的单用户操作系统中,任务是一个接一个运行的,完全串行。而多任务操作系统则允许终端用户同时运行多个程序,当一个程序不需要使用cpu的时候,系统会把该程序挂起或中断,以使其他程序可以使用cpu。
最早支持并发编程的计算机语言是汇编语言,不过那时候没有理论基础来支持这种编程方式,一个细微的编程错误就会使程序变得非常不稳定,并且对这种程序的测试也是几乎不可能的。
串行程序与并发程序
串行程序:特指只能顺序执行的指令列表
并发程序:可以被并发执行的两个或两个以上的串行程序的综合体
并发程序运行的方式:
- 允许其中的串行程序运行在一个或多个可共享的cpu之上
- 允许每个串行程序都运行在专为它服务的cpu之上
第一种方式也称为多元程序,它由操作系统内核支持并提供多个串行程序复用多个cpu方法。多元处理是指计算机中多个cpu共用一个存储器(内存),并且在同一时刻可能会有数个串行程序分别运行在不同的cpu之上。多元程序和多元处理是串行程序得以并发甚至并行运行的基础支撑。
并发程序与并行程序
我们很容易把并发和并行两个概念混为一谈,但实际上有很明显的区别。
并发编程:是指被同时发起并执行的程序
并行程序:可以在并行的硬件上执行的并发程序
换句话说,并发程序代表了所有可以实现并发行为的程序,包含了并行程序
并发程序与并发系统
首先,并发程序属于程序,即使它被划分为很多部分,只要这些部分之间是紧密关联在一起的,并且可以看成一个整体,那么它就属于一个程序,也可以称之为一个内聚的软件单元。
另一方面,程序与程序之间可以通过协商一致的协议进行通信,并且他们之间是松耦合的,他们可以看作是一个系统而不是程序。
并发系统更有可能是并行的,因为其中的多个程序一般可以同时在不同的硬件环境上运行。因此,并发系统常常称为并行系统,与并发系统同义的一个更加流行的词是分布式系统。
并发程序的内部交互
并发程序内部会被划分为多个部分,每个部分可以被看作是一个串行程序,这些串行程序之间可能会存在交互的需求。比如,多个串行程序可能都要对一个共享的资源进行访问。又比如,他们之间可能需要传递一些数据。在这种情况下,我们就需要协调他们的执行,这就涉及到同步。
同步的作用:是避免在并发访问共享资源时可能发生的冲突,以及确保有条不紊的传递数据。
并发编程的不确定性
串行程序所有代码的先后顺序都是固定的,而并发程序只有部分代码是有序的。也就是说,其中一部分代码的执行顺序并没有明确指定,这一特性被称为不确定性,这导致每次运行的代码执行路径都是不相同的,即使在输入数据相同的前提下。
编程难点
感觉编写并发程序困难主要有两个原因:
- 缺乏即非常适合开发应用程序又对并发编程有良好支持的语言
- 并发编程的理论相对较难
End