zoukankan      html  css  js  c++  java
  • 多任务

    1. 多任务的概念:

      多任务是指在同一时间内执行多个任务,

    2. 多任务的执行方式: 并发并行

      并发: 在一段时间内交替去执行任务。 对于单核cpu处理多任务,操作系统轮流让各个软件交替执行,

      并行: 在同一时间执行软件。 多核cpu是并行的执行多任务,始终有多个软件一起执行。

    3. 进程:  进程是实现多任务的一种方式

      概念:  一个正在运行的程序或者软件就是一个进程, 它是操作系统进行资源分配的基本单位

      注意:  一个程序运行后至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程。

      特点:  a. 进程之间不共享全局变量  b. 主进程会等待所有的子进程执行结束再结束

    4. 线程: 线程是实现多任务的另外一种方式。

      概念: 线程是cpu调度的基本单位,每个进程至少都有一个线程

      (线程在执行时有什么特点?)

      特点: a. 线程之间执行是无序

          b. 主线程会等待所有的子线程执行结束再结束

                    c. 线程之间共享全局变量

          d.线程之间共享全局变量数据出现错误问题

      注意: 全局变量数据错误的解决办法: 线程等待(join)  互斥锁()  

    5. 线程等待: join    多任务 ==> 单任务

        互斥锁: 对共享数据进行锁定,保证同一时刻只能有一个线程去操作。为保证共享数据操作的完整性,threading模块给我们提供了一个Lock类,我们把这个类创建的对象对应于一个可称为"互斥锁" 的标记, 这个标记用来保证在任一时刻,只能有一个线程访问该对象.

     互斥锁应用: 解决多线程中共享数据的资源竞争问题

     互斥锁缺点: 阻止了多线程并发执行,含锁的代码只能以单线程模式执行,效率就大大地下降了; 容易出现死锁问题;

    6. 死锁问题:(什么是死锁?怎样避免死锁?)

      死锁: 两个或多个线程中,如果每个线程锁定了其他线程试图锁定的资源,此时会造成这些线程永久阻塞.

      避免死锁: 在设计程序时, 尽量减少资源竞争, 无法避免资源竞争时, 各个线程及时释放锁定的资源.

       拓展思考: 乐观锁?

    7. GIL锁的理解(什么是GIL,怎么解决GIL?)

      python的原始解释器CPython中存在着GIL(Global Interpreter Lock, 全局解释器锁),因此在执行python代码时,会产生互斥锁来限制线程对共享资源的访问,直到解释器遇到I/O操作或者操作次数到达一定数目时才会释放GIL

      怎么解决GIL:

      1、能用进程(可以并行)不用线程。
      2、高效的代码(多线程执行的任务,想并行的)使用c,c++来编写

       

  • 相关阅读:
    Java基础之开发工具Eclipse的使用
    Java基础之身份证验证
    如何理解“程序=算法+数据结构”这句话
    JDBC
    Java与其它语言的比较
    Java整体之JavaEE
    Java项目之项目模板(登录注册)
    二进制
    计算机发展历程
    Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi
  • 原文地址:https://www.cnblogs.com/yqyn-study/p/13440198.html
Copyright © 2011-2022 走看看