📜  操作系统-多线程

📅  最后修改于: 2020-12-13 15:41:29             🧑  作者: Mango


什么是线程?

线程是通过过程代码执行的流程,它具有自己的程序计数器,该计数器跟踪下一条要执行的指令,保存其当前工作变量的系统寄存器,以及包含执行历史记录的堆栈。

线程与其对等线程共享的信息很少,例如代码段,数据段和打开文件。当一个线程更改一个代码段存储项时,所有其他线程都可以看到。

线程也称为轻量级进程。线程提供了一种通过并行性提高应用程序性能的方法。线程代表一种通过减少开销线程来提高操作系统性能的软件方法,该方法等同于经典过程。

每个线程仅属于一个进程,并且在一个进程之外不能存在任何线程。每个线程代表一个单独的控制流。线程已成功用于实现网络服务器和Web服务器。它们还为在共享内存多处理器上并行执行应用程序提供了合适的基础。下图显示了单线程和多线程进程的工作。

单线程与多线程进程

进程和线程之间的区别

S.N. Process Thread
1 Process is heavy weight or resource intensive. Thread is light weight, taking lesser resources than a process.
2 Process switching needs interaction with operating system. Thread switching does not need to interact with operating system.
3 In multiple processing environments, each process executes the same code but has its own memory and file resources. All threads can share same set of open files, child processes.
4 If one process is blocked, then no other process can execute until the first process is unblocked. While one thread is blocked and waiting, a second thread in the same task can run.
5 Multiple processes without using threads use more resources. Multiple threaded processes use fewer resources.
6 In multiple processes each process operates independently of the others. One thread can read, write or change another thread’s data.

螺纹的优点

  • 线程可最大程度地减少上下文切换时间。
  • 线程的使用提供了进程内的并发性。
  • 高效的沟通。
  • 创建和上下文切换线程更经济。
  • 线程允许更大范围和更高效率地利用多处理器体系结构。

螺纹类型

线程通过以下两种方式实现-

  • 用户级线程-用户托管线程。

  • 内核级线程-作用于内核(操作系统核心)的操作系统管理的线程。

用户级线程

在这种情况下,线程管理内核不知道线程的存在。线程库包含用于创建和销毁线程,在线程之间传递消息和数据,计划线程执行以及保存和还原线程上下文的代码。该应用程序从一个线程开始。

用户级线程

好处

  • 线程切换不需要内核模式特权。
  • 用户级线程可以在任何操作系统上运行。
  • 调度可以是用户级线程中特定于应用程序的。
  • 用户级线程可以快速创建和管理。

缺点

  • 在典型的操作系统中,大多数系统调用都处于阻塞状态。
  • 多线程应用程序无法利用多处理。

内核级线程

在这种情况下,线程管理由内核完成。应用程序区域中没有线程管理代码。操作系统直接支持内核线程。可以将任何应用程序编程为多线程。一个进程内支持应用程序内的所有线程。

内核维护整个流程以及流程中各个线程的上下文信息。内核调度是基于线程进行的。内核在内核空间中执行线程创建,调度和管理。内核线程通常比用户线程创建和管理慢。

好处

  • 内核可以在多个进程中同时调度来自同一进程的多个线程。
  • 如果某个进程中的一个线程被阻止,则内核可以调度同一进程的另一个线程。
  • 内核例程本身可以是多线程的。

缺点

  • 内核线程通常比用户线程创建和管理慢。
  • 在同一进程中将控制权从一个线程转移到另一个线程需要将模式切换到内核。

多线程模型

某些操作系统提供了组合的用户级别线程和内核级别线程功能。 Solaris是这种组合方法的一个很好的例子。在组合系统中,同一应用程序中的多个线程可以在多个处理器上并行运行,并且阻塞系统调用不必阻塞整个进程。多线程模型是三种类型

  • 多对多关系。
  • 多对一关系。
  • 一对一的关系。

多对多模型

多对多模型将任意数量的用户线程多路复用到相等或更少数量的内核线程上。

下图显示了多对多线程模型,其中6个用户级线程与6个内核级线程多路复用。在此模型中,开发人员可以根据需要创建任意数量的用户线程,并且相应的内核线程可以在多处理器计算机上并行运行。该模型在并发性方面提供了最佳的准确性,当线程执行阻塞的系统调用时,内核可以调度另一个线程以供执行。

多对多线程模型

多对一模型

多对一模型将许多用户级线程映射到一个内核级线程。线程管理是通过线程库在用户空间中完成的。当线程进行阻塞的系统调用时,整个过程将被阻塞。一次只能有一个线程访问内核,因此多个线程无法在多处理器上并行运行。

如果用户级线程库是在操作系统中以系统不支持它们的方式实现的,则内核线程将使用多对一关系模式。

多对一线程模型

一对一模型

用户级线程与内核级线程之间存在一对一的关系。该模型比多对一模型提供更多的并发性。当一个线程进行阻塞的系统调用时,它还允许另一个线程运行。它支持多个线程以在微处理器上并行执行。

该模型的缺点是创建用户线程需要相应的内核线程。 OS / 2,Windows NT和Windows 2000使用一对一关系模型。

一对一线程模型

用户级和内核级线程之间的区别

S.N. User-Level Threads Kernel-Level Thread
1 User-level threads are faster to create and manage. Kernel-level threads are slower to create and manage.
2 Implementation is by a thread library at the user level. Operating system supports creation of Kernel threads.
3 User-level thread is generic and can run on any operating system. Kernel-level thread is specific to the operating system.
4 Multi-threaded applications cannot take advantage of multiprocessing. Kernel routines themselves can be multithreaded.