• python之线程


    JoinableQueue

    可以被join的队列

    join是等待任务结束

    队列怎么叫结束?

    ​ 调用task_done一次则表示有一个数据被处理完成了 当task_done次数等于put的次数就意味着任务处理完成了

    ​ 这也是join的执行时机

    该队列可以明确告知数据的使用方,所有数据都已经处理完成

    在生产者消费者模型中,解决了消费者不知道何时算是任务结束的问题

    具体过程:主进程先等待所有的生产者进程生成完毕,再等队列中的数据被全部处理,这就意味着,任务全部结束

    # 多线程

    ​ 使用多线程 多进程的目的 是一致 ,都是为了并发执行任务,从而提高效率

    ​ 什么是线程:

    线程是操作系统运算调度的最小单位 (CPU最小执行单位),线程被包含在进程中,一个线程就是一个固定的执行流程 (控制流)

    ​ 线程的特点:

    ​ 进程是不能被执行,进程是一个资源单位,其中包含了程序运行所需要的所有资源,

    ​ 线程才是真正的执行单位,光有进程程序是无法运行的,必须先创建进程将资源加载到进程中,在启动线程来执行任务

    ​ 一个进程至少包含一个线程,称之为主线程,主线程是由操作系统来开启,

    ​ 一个进程可以包含多个线程,来提高程序的效率

    ​ 线程与进程的区别:

    ​ 线程创建的开销远小于进程

    ​ 统一进程中的所有线程共享进程内的资源

    ​ 线程之间没有父子关系,都是平等的,PID相同

    如何选择:

    ​ 要根据具体的任务类型,IO密集 计算密集

    ## 线程的使用方法与进程一模一样

    开启线程的位置可以是任何位置

    # 守护线程

    ​ 守护线程会在所有非守护线程结束时一起结束 ,当然守护可以提前结束

    # 线程安全问题

    ​ 并发操作同一个资源 可能导致数据错乱的问题

    ​ 解决方案: 加互斥锁

    ​ 互斥锁 mutex

    ​ 递归锁 Rlock 同一线程可以多次执行acquire()

    ​ 信号量 semaphore

    ​ 死锁问题:

    ​ 不止一个锁,分别被不同线程持有,相互等待对方释放,就会导致锁死问题

  • 相关阅读:
    电力基本知识
    .net图表工具汇总
    最重要的十年做什么才不浪费?
    花10分钟看一看少走30年弯路
    给明年依然年轻的我们
    Qt经典—线程、事件与Qobject
    C#源码500份
    .NET 性能优化方法总结==转
    qt +ChartDirector 绘制图表
    创业者,你为什么这么着急?
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/10979562.html
Copyright © 2020-2023  润新知