• 并发编程3


    joinableQueue

      在Queue的功能上多加了两个

      1 task_done  告诉容器已经处理完了一个数据

      2 join  也是哟个阻塞函数,一直到队列中的数据被处理完毕

      (task_done的调用次数等于队列中的数据数量)

    多线程理论

      线程指的是一条流水线,是代码执行的总称,也是一个抽象概念

      线程是CPU的最小执行单位,是具体负责执行代码的

      进程是一个资源单位,其中包括了该程序运行所需的所有资源

      线程的特点:

        一个进程至少包含一个线程,是由操作系统自动创建的称之为主线程

        一个进程中可以有任意数量的线程

        创建线程的开销对比线程而言要小的多

        同一个进程中的线程间数据共享(最主要的特点)

    多线程两种创建方式

      第一种直接实例化Thread

      第二种继承Thread类,覆盖run方法

      使用的方式与进程一致

      不同的是:创建线程的代码可以写在任何位置

           进程导入的模块 from multiprocessing import Process

           线程导入的模块 from threading import Thread

      主线程任务完毕后,进程不会立即结束,会等待所有子线程全部执行完毕

      在同一给进程中,所有线程都是平等的没有父子这么一说

    多线程

      互斥锁

      线程安全也是通过锁来保证,锁的用法与进程中一模一样

      死锁

        开发一些高并发程序很有可能出现线程/进程安全问题

        解决方案只有加锁,但是在使用锁时,很有可能出现死锁问题

        出现死锁问题的两种情况

          1 对同一把锁调用了多次acquire导致死锁问题

          2 有多把锁,一个线程抢一把锁,要完成任务必须同时抢到所有的锁,将导致死锁问题

        如何避免:

          1 能不加锁就不加  2 如果一定要加,保证锁只有一把

      可重入锁

        只能防止一个问题就是同一线程多次执行acquire

      信息量

        可以控制同一时间,有多少线程可以并发的访问

    多线程的常用属性

      Thread 对象常用属性

        name 线程的名字

        is_alive 返回线程是否活动

        daemon 指定是否时守护线程

      threading模块中常用数据

        current_thread 获取当前线程

        active_count 只在运行线程数量

        enumerate 返回所有在运行的线程对象

    守护线程

      守护线程会在主线程结束后立即结束,即使任务没有完成

      主线程会等待所有子进程全部完成后结束

      守护线程会在所有非守护线程结束后结束

  • 相关阅读:
    hikariCP性能调优
    Mysql 8.0 my.ini 系统变量设置Server System Variable Reference
    MySQL性能测试 : 新的InnoDB Double Write Buffermysql .dblwr
    MySQL MyISAM/InnoDB高并发优化经验
    解决NAVICAT 无法连接MYSQL8.0.12_可视化工具无法连接 MYSQL 8.0
    quartz 节点争抢Job 问题算法
    认识Flink中的Window
    多个用户同时update同一张表中的同一条记录会导致死锁吗?MySQL数据库?
    java.util.Base64 基本使用
    解决JDK1.8 编译时提示 程序包com.sun.image.codec.jpeg不存在的问题
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10489993.html
Copyright © 2020-2023  润新知