操作系统——多线程

1,什么是线程(Thread)

  • 线程是处理代码的执行流,有着自己的程序计数器,用来追踪下一次执行的指令,系统寄存器持有它的变量,栈包含了它的执行历史。
  • 线程间可进行数据共享。当一个线程改变了内存,其他线程亦可以看到。
  • 线程也叫做轻量级进程。线程基于并行工作提高应用程序的性能。线程是一种提高操作系统性能的软件方法,但是其开销小于多进程。
  • 每一个线程都存在一个特定的进程中。没有任何一个线程可存在于一个进程外。线程成功地被用于实现网络服务器和web服务器。

下图就是单进程单线程单进程多线程示意图。
在这里插入图片描述

2,进程和线程的不同

序号 进程 线程
1 进程是重量级,资源密集型 轻量级,消耗更小的资源(与进程比)
2 进程切换需要操作系统交互 线程切换不需要操作系统交互
3 多进程,相同代码,但每个进程拥有自己的资源 所有的线程可共用资源
4 当一个进程阻塞,其他进程等待 当一个线程阻塞,后续线程可执行
5 多进程中不用线程会用更多的资源 多线程进程用更傻少的资源
6 多进程中,每个进程都是相互独立的 一个线程可以改变读,写,改变其它线程的数据

3,线程的优点

  • 线程降低了上下文切换的时间
  • 多线程使得在进程中并发执行任务
  • 有效的通信
  • 线程的创建和切换上下文更加经济
  • 线程使得多处理器架构伸缩性更高、更有效

4,线程的类别

  • 用户级线程——用户管理的线程
  • 内核级线程——操作系统管理线程

4.1 用户级线程

在这种情况下,线程管理内核没有意识到线程的存在。线程库包含了创建和销毁线程的代码,包含了在线程间传递消息和数据的代码,以及调度线程执行和保存、恢复线程上下文的代码。应用被一个线程启动。下图是该类线程的示意图。
在这里插入图片描述

4.1.1,优点
  • 线程切换不需要内核模式权限
  • 用户级线程可以在任何操作系统上运行
  • 用户级线程可以快速创建和管理
  • 根据应用特定需要允许进程选择线程调度算法
4.1.2,缺点
  • 多线程程序没有利用多处理器的优势
  • 在传统的操作系统中,大多数系统调用被阻塞

4.2,内核级线程

该线程被操作系统的内核管理,在应用程序中没有线程管理代码。线程的创建、调度、销毁等操作均由内核来管理。内核维护了进程上下文切换以及单个进程中线程间的上下文切换。

4.2.1,优点
  • 内核可以同时调度同一进程的多个线程
  • 如果一个线程被阻塞,内核可以调度另一个
  • 内核本身就是多线程的
4.2.2,缺点
  • 线程创建和管理速度慢
  • 统一进程的线程间的控制传输需要内核的模式切换

5,多线程模型

一些操作系统提供了上述两种线程,比如Solaris系统。在混合操作系统中,同一程序中多个线程可以并行地运行于多个处理器上,一个阻塞的系统调用不会阻塞整个进程进行。多线程模型有三种。

  • 多对多关系
  • 多对一关系
  • 一对一关系

5.1,多对多关系

多对多关系线程模型是任意数量N的用户线程到相等或者小于N的内核线程的多路复用。
下图显示了多对多线程模型,其中6个用户级线程与6个内核级线程进行多路复用。在此模型中,开发人员可以根据需要创建任意数量的用户线程,并且相应的内核线程可以在多处理器计算机上并行运行。此模型提供了并发的最佳准确性,当线程执行阻塞系统调用时,内核可以调度另一个线程来执行
在这里插入图片描述

5.2,多对一关系

多对一模型将许多用户级线程映射到一个内核级线程。线程管理由在用户空间由线程库中完成。当线程进行阻塞系统调用时,整个进程将被阻止。 一次只有一个线程可以访问内核,因此多个线程无法在多处理器上并行运行。
如果用户级线程库在操作系统中以系统不支持它们的方式实现的,则内核线程使用多对一关系模式。
在这里插入图片描述

5.3,一对一关系

用户级线程与内核级线程之间存在一对一的关系。与多对一模型相比,此模型提供更多并发性。 当线程进行阻塞系统调用时,它还允许另一个线程运行。 它支持多个线程在微处理器上并行执行。
该模型的缺点是创建用户线程时需要相应的内核线程。 OS / 2,Windows NT和Windows 2000使用一对一的关系模型。
在这里插入图片描述

发布了80 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40657528/article/details/90209319