并发编程
基本概念
程序
程序是指令、数据及其组织形式的描述。
进程
进程是程序的实例,是系统进行资源分配和调度的基本单位,是计算机中程序关于某个数据集合上的一次运行活动,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是
程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。
进程包括(或者说“拥有”)下列数据: 那个程序的可运行机器码的一个在存储器的映像。
分配到的存储器(通常包括虚拟内存的一个区域)。
存储器的内容包括可运行代码、特定于进程的数据(输入、输出)、调用堆栈、堆栈(用于保存运行时运数中途产生的数据)。 分配给该进程的资源的操作系统描述符,诸如文件描述符(Unix术语)或文件句柄(Windows)、数据源和数据终端。
安全特性,诸如进程拥有者和进程的权限集(可以容许的操作)。 处理器状态(内文),诸如寄存器内容、物理存储器寻址等。当进程正在运行时,状态通常储存在寄存器,其他情况在存储器。
线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。
进程与线程区别:
1、地址空间和其他资源:进程间相互独立,同一进程的各线程间共享。一个进程内的线程在其它进程不可见。
2、通信:进程间通信IPC,同一进程的各线程间可以直接读写进程的数据段(如全局变量)来进程通信。
3、调度和切换:线程上下文切换比进程上下文切换要快的多。
并发
并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。
并行
并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
并发和并行区别
并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可