9、线程理论1
一、线程
1、线程是什么?
-
在传统的操作系统设计中,进程是资源分配的基本单位,每个进程都拥有独立的地址空间、页表和至少一个控制线程。
-
单一进程有多个线程的时候。这些线程虽然能独立执行,但是它们共享同一进程的地址空间及其中的所有数据
-
线程是操作系统能够进行运算调度的最小单位,是进程中的实际运作单元。
-
进程是资源独立,线程是资源共享。且2者都有调度能力。
一个进程的创建实际上伴随着其task_struct结构体、进程地址空间(mm_struct)以及页表的创建,虚拟地址和物理地址就是通过页表建立映射的。
二、线程的使用
1、功能
1.1、资源共享
- 多个线程共享一个进程的地址空间,共享了资源。
- 混合共享(有用户空间和内核空间)
- 混合共享(有用户空间和内核空间)
1.2、轻量级和高效性
- 比起进程,线程是更加轻量级的执行单元。
- 由于进程要管理一些文件信息,而线程不管理这些信息,导致线程的创建和销毁比进程快的多。
1.3、性能提升
- 在涉及大量计算和I/O处理的场景中,多线程编程能够显著提升应用程序的性能。
- 例如,在Web服务器中,一个线程可以处理客户端的连接请求,而另一个线程则负责从磁盘读取数据并准备响应。这种并行处理方式提高了服务器的吞吐量和响应速度。
2、多线程的解决方案
当多任务进行任务切换的时候,就会导致开销大。比如:web服务器(万维网服务器)。
3、单线程的解决方案
-
单线程会导致前一个请求未完成时,后续请求必须等待或者CPU在等待I/O期间处于闲置状态等等问题。
-
解决方法:
-
改为IO复用模型epoll:核心思想是使用单个线程通过系统调用同时监控多个I/O事件,当某个I/O操作就绪时才进行处理。
-
非阻塞的状态机模型:核心思想是所有I/O操作都设置为非阻塞模式,通过状态机管理请求处理流程。
-
-
三、经典线程模型
- 线程容易发生错误:因为共享资源,所以运行过程中,资源被修改成错的,就导致后面的运行发生问题。
- 线程是没有执行顺序的。可以使用线程的一些机制来实现顺序:线程同步等等。
- 线程和进程的内容:
四、线程的同步互斥机制
1、理论
-
由于同一个进程的多个线程会共享进程的资源,这些被共享的资源称为临界资源。
-
多个线程对公共资源的抢占问题,访问临界资源的代码段称为临界区
-
多个线程抢占进程资源的现象称为竞态
-
为了解决竞态,我们引入了同步互斥机制
-
互斥:确保同一时间只有一个线程能访问共享资源
-
同步:协调线程间的执行顺序
-
竞态,我们引入了同步互斥机制
-
互斥:确保同一时间只有一个线程能访问共享资源
-
同步:协调线程间的执行顺序