• 线程的简述Thread


    为什么有进程?

    原来操作系统只能处理一件任务,有了进程就可以让操作系统处理多个任务。因为进程与进程之间是完全隔离的,涉及到了内存空间、数据的切换,所以就有了进程的概念。

    已经有了进程,为什么还要线程?

    线程有以下缺陷:

    1,线程在同一时间只能干同一件事儿。

    2,线程在执行任务的过程遇到阻塞,比如对等待输入,整个进程就会挂起,即使进程中有些任务不依赖数据的输入,也将无法执行。

    比如学生上课学习,耳朵需要听课,手需要记笔记,大脑需要思考,这三件事都需要同时进行。

    再比如老师,需要讲课,需要写到黑板上,需要思考,如果遇到问题,阻塞住了,只能等待,就不能干其他事儿。

    因此引入了轻量级进程就是线程。

    进程是资源分配的最小单位,线程使cpu调度的最小单位。每个进程最少有一个进程。

    线程的特点:

    1,轻型实体

    线程中的实体基本上不拥有系统资源,只需要一点必不可少、保证独立运行的资源。

    线程的实体包括:程序、数据、TCB。线程是动态概念,特德动态特性由线程控制块TCB(Thread Control Block)描述。

    TCB包括以下信息:

    1,线程状态
    2,当线程不运行时,被保存的现场资源
    3,一组执行堆栈
    4,存放每个线程的局部变量主存区
    5,访问同一进程中的主存和其他资源
    用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈

    2,独立调度和分派的基本单位

    在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很轻,所以线程的切换非常迅速且开销小(在统一进程之中)。

    3,共享进程资源。

    同一进程中的所有线程拥有相同的进程id,这意味着线程可以访问该进程的每一个内存资源;此外线程还可以访问进程打开的文件、定时器、信号量机构等。由于同一个进程的线程共享内存和文件,所以线程之间通信不必调用内核。

    4,可并发执行。

    相同进程中的线程可以并发执行,甚至允许所有线程都并发。

    同样,拨通进程中的线程也能并发执行,充分利用和发挥了处理机和外围设备并行工作的能力。

    线程的使用场景:

    开启一个字处理软件进程,该进程肯定需要办不止一件事情,比如监听键盘输入,处理文字,定时自动将文字保存到硬盘,这三个任务操作的都是同一块数据,因而不能用多进程。只能在一个进程里并发地开启三个线程,如果是单线程,那就只能是,键盘输入时,不能处理文字和自动保存,自动保存时又不能输入和处理文字。

    进程之间是竞争的,线程之间是合作的。

    线程也是有问题的:

    1,父进程有多个线程,当开启子进程是否需要同样多的线程

    2,在同一进程中,如果一个线程关闭了文件,而另外一个线程正准备往该文件内些内容呢

    所以,在多线程的代码中,需要更多的心思来设计程序的逻辑、保护程序的数据。

    线程和Python

    Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行。虽然 Python 解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行。
      对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。

    在多线程环境中,Python虚拟机按以下方式执行:

    1,设置GIL

    2,切换到一个线程去执行

    3,运行指定数量的字节码或者线程主动让出控制(可以调用time.sleep())

    4,把线程设置成睡眠状态

    5,解锁GIL

    6,再次重复以上所有代码

  • 相关阅读:
    Cocos2d-x 2.x项目创建
    Mac OS 使用Git
    Android Studio And Gradle
    Mac OS环境变量配置(Android Studio之Gradle)
    【Android UI】 Shape详解
    JS-OC通信之Cordova简介
    python类的定义和使用
    Android屏幕适配常识
    Python面试315题
    第十五篇 Python之文件处理
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9846997.html
Copyright © 2020-2023  润新知