zoukankan      html  css  js  c++  java
  • 并发编程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 返回所有在运行的线程对象

    守护线程

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

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

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

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10489993.html
Copyright © 2011-2022 走看看