Menu

进程,线程,协同程序之间的区别

2018年2月4日 - 操作系统

进程:有自己的堆栈,即不共享堆,也不共享栈,进程由操作系统调用

进程有三种状态:1就绪状态 2运行状态 3阻塞状态(等待资源)

线程:有自己的堆栈,共享堆,不共享栈,线程由操作系统调用

一个进程包含多个线程,一个进程内的线程共享资源,

举列子:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

协同程序:有自己的堆栈,共享堆,不共享栈,协同程序在程序中调用,由程序间相互配合

一个应用程序,譬如QQ在操作系统中运行时的状态,就是一个进程,可以从进程管理器中查看,进程,一个应用软件可以对应多个进程,比如你同时开启两个QQ,进程有自己的内存

线程是运行在进程中的,一个进程至少对应一个线程,线程有自己的内存,线程在进程中是串行传输的,多线程是多个任务同时进行,对CPU消耗比较大,协同程序是程序间相互合作的,同一时间,只有一个程序在运行,协同程序也是运行在一个进程之中

 

在多处理器情况下,从概念上来讲多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起。

 

线程的并行和并发

并行:需要操作系统有多个CPU,(多核CPU),并发是同时进行的,A和B同时运行在进程中

并发:是程序之间互相切换,A切换到B,B在切换到A,看似同时进行

 

多线程实现程序的并行,并发

  1. java中的Thread类定义了多线程,通过多线程可以实现并发或并行。
  2. 在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。
  3. 在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。
  4. 至于多线程实现的是并发还是并行?上面所说,所写多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,如果有人问我我所写的多线程是并发还是并行的?我会说,都有可能。
  5. 不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: