首先,并行与并发都是程序多线程处理场景,因此,一旦提到并行与并发,那首先想到的是多线程。
狭义理解就是操作系统中一段程序的执行过程。那么广义上,进程是指一个具有一定独立功能的程序操作系统中关于某个数据集合进行的一次运行活动。是操作系统程序动态执行的基本单元。在传统的操作系统中,进程既是一个操作系统的基本分配单元,也是操作系统的基本执行单元。
进程共有三种状态:就绪、阻塞和运行
就绪状态是指程序已达到可以运行的状态,只等CPU分配资源就可以运行的状态。
当程序运行条件没有满足时,需要等待条件满足时候才能执行时所处的状态,如等待i/o操作时候,此刻的状态就叫阻塞态。
进程占用CPU,并在CPU上运行。即程序正在运行时所处的状态。
线程是进程中执行运算的最小单元,是操作系统执行处理机制的基本单位。每个进程至少有一个线程,线程可以利用进程所拥有的资源执行调度和运算。
进程与线程的对比
进程与线程的关系
进程与线程的区别
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务(多进程)。现代的操作系统几乎都是多进程操作系统,能够同时管理多个进程的运行。 多进程带来的好处是明显的。但是多进程对于系统的资源要求甚高,资源浪费也比较严重。应用多进程场景最多的是windows系统,例如同时打开运行软件,每个软件打开相当于运行一个进程。
在一段完整的代码中,往往会有需要独立的代码模块,而这些独立运行的程序片段叫作“线程”(Thread),利用多个线程编程的概念就叫作多线程处理(多线程编程),多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在程序在同一时间需要完成多项任务的时候实现的。多线程的目的仅仅是为了提高资源利用效率。各个线程执行自己的任务,这些线程可以”同时进行“。同时进行并非同一时刻进行,而是在某一时间段内,完成所有任务,任务的运行有先后顺序。
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥
所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。
多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。
并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中B,C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二个阶段只有B在执行,第三个阶段只有C在执行。其实,并发过程中,A,B,C并不是同时在进行的(微观角度)。但又是同时进行的(宏观角度)。
并行指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源上(多核),同时执行。并行,不存在像并发那样竞争CPU资源,等待执行的概念,因为并行状态下的线程分布在不同的CPU上。
并发和并行的区别