进程与线程
进程与线程的关系可以参考图一。
进程
程序是由指令和数据组成的,但这些指令需要运行,数据要读写,就需要将指令加载至CPU,数据加载到内存。再指令运行的过程中还需要用到磁盘网络等设备,进程就是用来加载指令、管理内存,管理IO的。当一个程序被运行时,从磁盘加载这个程序至内存,这时候就开启了一个进程。进程就可以视为一个程序的实例,大多数程序可以运行多个实例进程(例如:浏览器),也有的程序只能开启一个实例进程(例如:网易云音乐)。
线程
一个进程里面可以包含一至多个线程,一个线程是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU去执行。java中线程是最小的调度单位,进程是资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器。
二者对比
1.进程基本是相互独立的,而线程存在与进程中,是进程的一个子集。
2.进程拥有共享的资源,如内存空间,供其内部线程共享。
3.不同的计算机之间的进程通信,是通过网络的,需要遵守相同的协议如HTTP协议。
4.线程通信比较简单,因为它们共享进程中的内存,比如多线程同时对同一个共享变量经行操作。
5.线程更轻量化,它的上下文切换成本一般要比进程小很多。
图一
并发与并行
并发
同一时间,同一个进程完成多件事情的能力我们称为并发。
在线程中,多个线程操作同一个共享资源(读写数据等等)我们也可以称为并发。
并发
并行
同一时间,多个进程完成多件事情的能力我们成为并行。
并行
当我们使用单核CPU电脑的时候,我们在桌面打开音乐听歌的同时,还在打着游戏,这时就是并发执行两个线程,一个音乐线程,一个游戏线程,只是由于操作系统中有一个时间调度器,会一直切换调度执行的线程,由于花费的时间很短,宏观上我们感觉是在同时运行,微观上是在不断的切换线程执行指令。所以电脑的CPU核心越高,一般后台处理事务的能力越强。如果是单核CPU电脑,当你开启的应用很多的时候,电脑就会卡顿,这就是由于调度器切换进程的时候会花费时间,切换的越多,越频繁,就能越直观的感受到这种卡顿。











网友评论