这个问题是基础面试必问,作为非计算机专业的人,我今天在阅读《CLR via C#》的第25.1节才了解到区别
简单来讲:
进程是应用程序的一个实例要使用的资源的集合。
线程是一个虚拟化的CPU,或者逻辑CPU。
从概念上来讲,进程与线程差别巨大,甚至可以说毫无关系;但是因为现在操作系统都是设计成一个进程默认有一个执行线程,且线程只能使用当前进程内的资源,所以容易把线程理解成轻量级的进程。
可以想象一下,如果操作系统有多个进程,但是只有一个CPU,或者说只有一个线程,那必然是这一个CPU去依次顺序切换不同的进程空间并去执行进程中的代码,一旦代码中有BUG,就会带来整个系统的崩溃。以上所说的情景当然是不可能发生的,不过这样的想象有助于帮助理解概念。
区别了两个概念,也就知道了进程和线程的使命完全不同。
进程是为了隔离:
1.隔离不同的应用程序实例。使得一个应用程序崩溃不会影响其它的应用程序
2.隔离应用程序和内核代码/资源。使得应用程序不会影响内核的稳定性
线程是为了执行和并发:
1.线程有自己的执行环境,因此为创建这种环境,线程有自己的开销
2.线程需要调度,因此有优先级,前台后台等概念
3.憋不出第三条了……