何为线程:
线程是程序中负责执行的单位,它可以被看作是进程的一部分,是进程的子任务。线程与进程的区别在于,进程是一个资源单位,而线程是进程的一部分,它只有栈这个独立的资源,其他资源如代码段、数据段、堆、环境变量表等都是共享的。一个进程至少有一个线程(主线程),可以有多个线程。线程可以通过同步方式(如pthread_join函数等待)或异步方式(不与主线程有关,无法被等待)来执行
线程其实是进程的一个执行流
我们过去的进程认为是内核数据结构+进程代码与数据
将这些的组合叫做进程,但是线程其实也是这样的组合结构
但是在linux中,我们认为线程其实也就是多个PCB共享除PCB以外的进程数据结构+代码数据。
整个红框中的数据结构的集合我们叫做进程。如果进程只有一个PCB我们称之为单执行流进程
拥有多个PCB数据结构的进程,我们称之为多执行流进程。
在linux操作系统中,我们并没有为线程独立开新的数据结构,而是复用了进程PCB数据块模拟线程。做到了一种复用逻辑,所以其实我们linux操作系统避免有线程的概念。
所以我们将进程线程统称为轻量级进程。
进程内的线程的pid相同,应为处于同一进程内,但是他们的tid不同(线程id
先写个代码
运行函数
所有线程的pid都是相同的说明了,他们确实处于同一进程内
ps -L选项查看线程
PID:进程id
LWP:轻量级进程id号
多个线程PID相同,LWP号不同,确实创建了多个线程,而LWP与PID相同的线程,我们称之为主线程
线程与线程之间
在同一个进程中的线程,也是有着独立与共享的分别
线程独立拥有:
线程独立最重要的就是一组寄存器与栈。
一组寄存器是对上下文数据的保存,在轻量级进程调度的时候保证不会出错
栈是函数栈帧,保存该线程的工作环境与上级函数。
结论:
线程:是CPU调度的基本单位。
进程:是承担分配系统资源的基本实体单位