1.什么是进程
进程是计算机中正在运行的程序的实例,包含程序代码、数据和系统资源(如内存、CPU时间)的集合。

打开资源管理器,我们就可以看到此时此刻运行在计算机上面的进程。
然而,进程是一个相对而言比较重的概念,进程的创建和销毁的开销比较大,对于我们每个人的计算机来说,可能觉得我打开和关闭一个进程是几秒钟的事情,并没有感觉到开销很大,但是对于服务器来说就不一样了。什么是服务器呢?打个比方,服务器就像餐馆,而我们的客户端就像是来餐馆吃饭的客人。客户端对服务器发出请求,而服务器就会响应客户端发出的请求。就好比你去餐馆发出吃饭的请求,而餐馆就会响应你的请求来做饭。
在90年代的时候,每个客户端向服务器发出请求,服务器就会提供一个进程为客户端进行服务。但随着时代的发展,计算机逐渐走入千家万户,客户端对服务器的请求越来越频繁,而进程创建和销毁开销大的缺点被逐渐放大。为了解决这个问题,我们引入了线程(Thread),可以简单理解为轻量级进程,即创建和销毁开销更小的进程。
2.什么是线程
线程是操作系统能够调度的最小执行单位,属于同一进程的多个线程共享内存和资源,但各自拥有独立的执行路径。
每个进程可以看做成一个要执行的任务,而每个线程也是一个要执行的任务,即运行的一段代码指令。我们可以简单地认为进程是大任务,而线程则是大任务中细分的小任务。
3. 进程和线程的区别
进程是操作系统资源分配的基本单位,而线程则是CPU上调度执行的基本单位。
首先谈谈进程是操作系统资源分配的基本单位。操作系统的资源主要包括CPU、内存、硬盘资源、网络带宽等。进程的创建和销毁需要申请和释放资源,这是开销很大的操作。而线程则会共享这些资源,只有在第一个线程创建的时候会和进程一起申请资源,后续创建线程直接用申请的资源就行,当所有线程销毁时,进程也销毁,然后释放资源。
再来说线程则是CPU上调度执行的基本单位。CPU就好比舞台,每个线程就是演员,每个线程都有上CPU的机会。比如说进程里面有线程a、b、c,有可能a去CPU核心1上执行,b去CPU核心2上执行,c去CPU核心3上执行,这就是并行。也有可能线程a、b、c都在同一个核心上来回切换执行,这就是并发。也有可能a、b在一个核心上来回切换,c在另外一个核心上执行。这些线程的调度执行都是由操作系统随机调度的,我们程序员无法感知和干预。
4.进程和线程的联系
进程包含线程,每个进程中都会包含一个或者多个线程。在Windows的任务管理器中,我们看不到进程内部的线程,但可以借助VS的调试器、Windbg等其他调试工具来看到线程。
