进程(process)与线程(Thread)是两个完全不同的概念,但二者又有着千丝万缕的联系。
进程中包含线程,线程是进程的一部分。
进程作为操作系统的重要组成单元具有清晰的边界,主要由线程、内存以及文件/网络句柄三部分构成。
操作系统中进程之间具有明显的边界,把各个程序分隔开来,保证程序的独立性,类似于一个个独立的容器,任务的执行依赖线程。
在同一进程中可以包含一个或者多个线程执行所分派的任务。进程中的内存是指逻辑内存,所指的是寻址空间,例如一个32位的操作系统,
内存空间为4G,此时的4G是指每个进程可分配的空间为4G,但是并不是讲每一个进程所分配的实际内存空间为4G,各个进程之间的内存互相独立。
由于进程间的交互无法共享内存,为此会采取一系列方法实现进程间的交互,例如TCP/IP协议。
进程中的文件\网络句柄信息在各个进程之间是共享的。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22d18760f0ec178fe00f7c59c0f21320.png#pic_center)
线程是操作系统能够进行运算调度的最小单位,包含于进程当中,是进程中实际运作单位。
同一进程中的多条线程共享进程中的全部资源信息,例如虚拟地址空间、文件描述符与信号处理等。
一条线程所表示的含义为进程中一个单一顺序的控制流,在一个进程中可以包含多条线程同时工作,每条线程并行执行不同的任务。
同一进程中的不同线程有各自调用的栈(call stack)、下一条执行执行地址(program context)以及线程自身本地存储(thread-local storage)。
线程间的通信以共享内存为参考,只要是指针指向同一内存,既可以实现信息的交互。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/51cf89a1a603dc321cdf954b133cf0e1.png#pic_center)