zoukankan      html  css  js  c++  java
  • 线程

    joinableQueue
    与普通的Queue没区别 多了两个方法 task_done join
    task_done是告诉容器已经处理完了一个数据
    join是阻塞函数 等到队列中的数据被处理完毕 (task_done的调用次数等于队列中的数据数量)

    线程:
    线程指的是一条流水线,整个执行过程的总称
    线程是CPU的最小执行单位,是具体负责执行代码的

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

    线程的特点:
    一个进程中至少包含一个线程,是由操作系统自动创建的 称之为主线程
    一个进程中可以有任意数量的线程
    创建线程的开销对比进程而言 要小得多
    同一个进程中的线程间数据是共享的(最主要的特点)


    如何使用:使用的方式与进程一致
    from threading import Thread 导入模块
    开启线程速度比开启进程快很多
    两种使用方法和进程一样
    实例化一个对象与集成Thread类然后覆盖run方法
    创建线程不需要加入到main判断下面.
    主线程任务执行完毕后 进程不会立即结束 ,会等待所有子线程执行完毕才会结束
    在同一个进程中 所有线程都是平等的 没有子父这么一说
    无论创建多少个子线程,pid都不会变.

    线程安全问题
    线程安全也是通过锁来保证,锁的用法和进程一样
    死锁:
    在使用锁时,很有可能出现死锁问题
    出现死锁问题原因:
    1.对同一把锁调用了多次 acquire 导致死锁问题 最low的死锁问题
    应该避免在代码中使用这种写法
    2.建了两把锁,每个方法都使用到了两把锁但是有两个对象,每个对象都抢到了一把锁
    所以就出现了死锁问题
    如何避免:
    1.能不加锁就不加
    2.如果一定要加锁,要保证锁只有一把

    RLock(可重入锁):
    不能解决死锁问题 只能解决锁的多次调用造成死锁的问题

    信号量:
    限制有多少线程可以并发访问
    不是用来处理线程安全问题

    守护线程
    守护线程会在主线程结束后立即结束 即使任务没有完成
    主线程 会等待所有子线全部完成 后结束
    守护线程会在所有非守护线程结束后 结束

    主线 守护线程
    主线程要等待所有子线结束
  • 相关阅读:
    【学】SoapExtension 学习
    【原】SQL ROW_NUMBER() OVER
    java线程(四)
    java线程(三)
    java线程(二)
    java线程(一)
    编写自己的一个简单的web容器(二)
    编写自己的一个简单的web容器(一)
    java网络编程基础
    spring 数据校验之Hibernate validation
  • 原文地址:https://www.cnblogs.com/xiezuodd/p/10491615.html
Copyright © 2011-2022 走看看