【Linux线程】一、什么是线程

简介: 【Linux线程】一、什么是线程

1. 什么是线程

线程就是 Light weight process ,LWP,轻量级进程,在Linux环境下它仍然是进程,一个进程内部可以有多个线程,默认情况下一个进程内部有一个线程。不同的是,进程有自己的进程控制块PCB,并且拥有自己独立的地址空间;而线程虽然也有线程控制块(这样来看,如果一个进程内有多个线程,那么进程内将有多个PCB),但是它没有独立的地址空间,而是共享空间,我们可以理解为在进程的虚拟空间中除了栈都是共享的(在实际编程中,线程一般就是一个函数,函数肯定要有自己的栈来运行)。也就是说,进程和线程最大的区别在于是否共享地址空间。在Linux环境下,线程是最小的执行单位,进程是最小的资源分配单位。

我们在进程间通信的时候,因为每个进程都有自己的进程地址空间,所以才要通过信号、管道等去传递数据。而线程共享存储空间(除栈外),所以通信就方便多了,在进程中定义一个全局变量就可以让所有线程去共享,来实现通信。通过线程可以把任务分解,同一个进程中不同线程同时执行不同的任务,大大提供了执行效率。但是,如果当前计算机只有一个CPU核心,多线程也就没意义了,因为线程执行的时候都要持有CPU。

2. Linux内核线程实现原理

在类Uinx系统中,早期是没有线程概念的,直到80年代才引入,借助进程机制实现出了线程的概念,因此在类Uinx系统中,线程和进程密切相关。

  • 首先线程是轻量级进程LWP,线程也有PCB,创建线程所使用的底层函数和进程一样,都是clone。
  • 从内核的角度来看,进程和线程是一样的,都有自己不同的PCB。
  • 进程中可以包含很多线程,并且进程至少包含一个线程。
  • 线程可以看作是寄存器和栈的集合。
  • 在Linux下,线程是最小的执行单位,进程是最小的资源分配单位。
  • 可以通过 ps -Lf pid 来查看指定线程的lwp号。

3. 线程的共享资源和非共享资源

3.1 共享资源

  • 文件描述符
  • 每种信号的处理方式
  • 当前工作目录
  • 用户ID和组ID
  • 内存地址空间,text段、data段、bss段、heap段、共享库。(也就是我们前面画过的进程地址空间示意图中,除了栈stack段以外的部分)

3.2 线程非共享资源

  • 线程ID
  • 处理器现场和栈指针(内核栈)
  • 独立的栈空间(用户空间栈)
  • errno变量,每个线程都有自己的errno,所以不能再像进程那样使用perror来打印,应该使用sterror函数打印。
char *strerror(int errnum); /*获取错误码对应的错误信息*/
  • 信号屏蔽字,多线程编程中,应尽量避免使用信号。
  • 调度优先级

4. 线程的优缺点

优点是可以提高程序的并发性,有效提高CPU利用率;并且开销小,多个线程共享进程的空间,数据之间的通信和共享更方便。

缺点是调试和编写工作繁琐,并且线程相关的库函数不稳定,对信号机制的支持不友好。这里要注意,线程都是库函数,在编译的时候都要加上一个参数 -pthread。

相关文章
|
1月前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
53 1
|
21天前
|
API
linux---线程互斥锁总结及代码实现
linux---线程互斥锁总结及代码实现
|
21天前
|
Linux API
Linux线程总结---线程的创建、退出、取消、回收、分离属性
Linux线程总结---线程的创建、退出、取消、回收、分离属性
|
21天前
|
API
Linux---线程读写锁详解及代码实现
Linux---线程读写锁详解及代码实现
|
1月前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
20 1
|
12天前
|
安全 Linux 数据安全/隐私保护
【linux】线程同步和生产消费者模型
【linux】线程同步和生产消费者模型
11 0
|
1月前
|
Java Linux Shell
Linux环境下,让Jar项目多线程部署成为可能
Linux环境下,让Jar项目多线程部署成为可能
22 1
|
1月前
|
Linux 调度
【Linux】线程ID
【Linux】线程ID
|
2月前
|
设计模式 安全 Java
【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解
【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解
|
2月前
|
安全 算法 Linux
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)