• 线程原理篇——>第7章 线程


    第7章 线程

    7.1 进程的分身术——线程

    进程与线程的区别(面试题)

    线程就是我们为了让一个进程能够同时干多件事情而发明的“分身术”。

    线程的本质:拥有同样的程序文本。

    线程是进程里面的一个执行上下文或者执行序列。一个进程可以拥有多个执行序列。

    在线程模式下,一个进程至少有一个线程,但也可以有多个线程。

    将进程分解为线程还可以有效利用多处理器和多核计算机。在没有线程的情况下,增加一个处理器并不能让一个进程的执行速度提高。但如果分解为多个线程,则可以让不同的线程同时运转在不同的处理器上,从而提高进程的执行速度。

    7.2 线程管理

    评判标准:如果某资源不独享会导致线程运行错误,则该资源就由每个线程独享;而其他资源都由进程里面的所有线程共享。

    一般情况下线程共享和独享资源的划分

    序号

    线程共享资源

    线程独享资源

    1

    地址空间

    程序计数器

    2

    全局变量

    寄存器

    3

    打开的文件

    4

    子进程

    状态字

    5

    闹铃

     

    6

    信号及信号服务程序

     

    7

    记账信息

     

     

    7.3 线程模型的实现

    用户态和内核态的区别(面试题)

    进程的调度有两种。一、进程的调度交给线程;二、将线程的调度交给操作系统。

    这两种不同的调度形成了线程的两种实现:用户态实现和内核态实现。由进程自己管理就是用户态线程,由操作系统管理就是内核态线程实现。

    用户态和内核态的判断以线程表所处的位置为依据:位于内核叫做内核态实现,位于用户层叫做用户态实现。

     

    线程的实现方式。因为线程是进程内部的东西,所以,存在由进程直接管理线程的可能性。因此,线程存在着内核态与用户态两种实现可能。

    7.3.1 内核态线程实现

     

    7.3.2 用户态线程实现

    用户态实现就是用户自己做线程的切换,自己管理线程的信息,而操作系统无须知道线程的存在。

    用户态如何进行线程调度呢?用户自己写一个执行系统(runtime system)作调度器,即成了正常执行任务的线程外,还有一个专门负责线程调度的线程。用户态下的运行,是一个线程在执行完一段时间后主动把资源释放给别人使用,而在内核态下则无须如此。因为操作系统可通过周期性的时钟中断把控制权夺过来。在用户态实现情况下,执行系统的调度器(runtime scheduler)也是线程,没有能力强行夺走控制权,所以必须合作。

    用户态的优点:

    灵活性。因为操作系统无须知道线程的存在,所以在任何操作系统上都能应用。

    线程切换快。因为切换在用户态进行,无须陷入到内核态。

    不用修改操作系统。

    用户态的缺点:

    编程序变得很诡异。由于用户态线程需要相互合作才能运转,所以,我们在写程序时,必须仔细斟酌在什么时候应该让出CPU给别的线程使用。而让出时机的选择对线程的效率和可靠性由很大的影响。

    用户态线程实现无法完全达到线程提出所要达到的目的:进程级多道编程。

     

    7.4 现代操作系统的线程实现模型

    7.5 多线程的关系

    7.6 讨论:从用户态进入内核态

    7.7 讨论:线程的困惑——确定性与非确定性

    思考题(面试题)

    1、进程和线程的区别

    2、用户态和内核态区别

    3、用户态和核心态区别

  • 相关阅读:
    ios 常见性能优化
    ios Standard Framework和Umbrella Framework
    lua 中容易忘记的细节
    python md5
    lua table 排序
    centos 图形模式与命令行模式设置
    python 中关于 json 的一些相关操作
    python3 入门基础
    lua 函数
    sublime 自定义配置python开发环境
  • 原文地址:https://www.cnblogs.com/lanyuejiagou/p/12606097.html
Copyright © 2020-2023  润新知