zoukankan      html  css  js  c++  java
  • python中的多任务--线程

    什么是多任务?

    简单地说,就是操作系统可以同时运行多个任务。

    实现多任务有多种方式,线程、进程、协程。

    多任务的概念:并行和并发

    并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,

    实现用多个任务“一起”执行

    并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的

    注意:

    假的多任务--->并发(时间片轮转--cpu高速轮流执行)

    真的多任务--->并行(cpu一个一个单独执行)

    什么是线程?

    可以简单理解为同一进程中有多个计数器,每个线程的执行时间不确定,

    而每个进程的时间片相等,线程是操作系统调度执行的最小单位.

    线程的创建(两种)

    6.1thread(target=函数名)

    6.2创建一个类(继承thread方法),里边必须有run方法,创建一个实例对象,

    调用start的时候,start会自动调用run方法(其他函数和方法,都在run方法里边完成)

    线程的创建步骤

    import threading

    # 创建一个线程对象

    t1 = threading.Thread(target=func_name, args=(num,), name=”子线程名字”)

    # 创建一个线程并启动

    t1.start()

    # 等待子线程执行完毕之后再继续向下执行主线程

    t1.join()

    备注:主线程会等待子线程结束之后才会结束,主线程一死,子线程也会死。

    线程的调度是随机的,并没有先后顺序。

    主线程和子线程

    了解函数的调用和指向:

    target=函数()------>调用函数 ; target=函数--->指向函数

    3.1调用start的时候,子线程被创建;函数运行完,子线程结束

    3.2主线程运行完不会结束,会等待子线程结束后,再结束

    3.3如果主线程先结束了,所有剩下的子线程会被强制结束

    3.4注意:线程的是没有先后顺序的

    枚举函数enumerate的用法

    定义:enumerate()是python的内置函数,在字典上是枚举、列举的意思。

    用途:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,

    同时列出数据和数据下标,一般用在 for 循环当中,通过threading.enumerate()就可以获取线程列表。

    enumerate函数的应用(查看线程的数量):

    threading.enumerate()可以创建一个线程列表,可以通过列表的长度查看线程的数量

    thread和start,哪个执行时候创建对象、执行线程:

    1.调用thread,不会创建线程,只是创建一个对象

    2.当调用thread创建出来的实例对象的start方法的时候,才会创建线程以及让这个线程开始运行

    多线程-共享全局变量

    优缺点:

    在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据

    缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱

    导致的问题:

    如果多个线程同时对一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确

    注意:

    target指定将来这个线程去哪个函数执行代码

    args指定将来调用函数的时候,传递什么数据过去-->元祖要加 “,”

    只有在修改指向的时候,才会修改全局变量

    什么是同步:

    同步就是协同步调,按预定的先后次序进行运行

    同步的作用:

    解决线程同时修改全局变量的方式

    互斥锁--解决资源竞争的问题

    互斥锁是怎么引入的?

    当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制,

    线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁

    互斥锁的构建流程

    某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他线程才能再次锁定该资源。

    互斥锁的作用

    互斥锁保证了每次只有一个线程进行写入操作,保证了多线程情况下数据的正确性。

    什么是死锁:

    在线程间共享多个资源的时候,如果两个线程分别占有一部分资源

    并且同时等待对方的资源,就会造成死锁

    如何避免死锁:(两种方法)

    1.银行家算法

    2.添加超时函数timeout()

  • 相关阅读:
    Oracle 游标
    对"com1"的访问被拒绝
    几种不伤身体的速效减肥秘方 生活至上,美容至尚!
    护肤必备,教你如何护理肌肤 生活至上,美容至尚!
    九种食物摆脱便秘烦恼 生活至上,美容至尚!
    1个多月就能看到效果的减肥大法 生活至上,美容至尚!
    防晒涂抹四大要领,让你远离日晒痛苦 生活至上,美容至尚!
    晚间保养四部曲 轻松护肤有妙招 生活至上,美容至尚!
    夏日驱蚊虫蟑螂的最好办法! 生活至上,美容至尚!
    睡前一分钟打造完美下半身 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/mengxinfeng/p/12545531.html
Copyright © 2011-2022 走看看