zoukankan      html  css  js  c++  java
  • 线程

    线程

    线程:进程中工作的流水线,具体功能执行某一段代码

    线程与进程的区别:

    线程共享创建它的进程的地址空间,进程拥有它们自己的地址空间。线程可以直接访问其进程的数据段;进程具有父进程的数据段的自身副本。

    线程可以直接与其进程的其他线程通信,进程必须使用进程间通信来与兄弟进程通信。新线程容易创建创建成本远远低于进程(创建速度远远高于进程),新进程需要复制父进程。线程可以对同一进程的线程执行相当大的控制,进程只能对子进程执行控制。

    对主线程的更改(取消、优先级更改等)可能会影响进程的其他线程的行为,对父进程的更改不影响子进程。

    线程中其他方法:

    threading.currentThread(): 返回当前的线程变量。

    threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

    threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

    守护线程:

    对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕,其他和进程一样

    锁死和递归锁:

    所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

    递归锁:在Python中为了支持在同一线程中多次请求同一资源,python提供了可重入锁RLock。这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。上面的例子如果使用RLock代替Lock,则不会发生死锁:

    信号量:

    Semaphore管理一个内置的计数器,每当调用acquire()时内置计数器-1;

    调用release() 时内置计数器+1;计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。

     

  • 相关阅读:
    鸟哥的私房菜基础篇之Linux 开机流程分析
    鸟哥的私房菜基础篇之Linux 档案属性与目录配置
    鸟哥的私房菜基础篇之认识BASH Shell
    Linux中Top命令结果的各项含义
    鸟哥的私房菜基础篇之认识系统服务 daemons
    鸟哥的私房菜基础篇之Linux 例行性命令的建立
    鸟哥的私房菜基础篇之Linux档案与目录管理
    鸟哥的私房菜基础篇之什么是Linux
    鸟哥的私房菜基础篇之首次开机与关机
    修改oracle的processes和session(转)
  • 原文地址:https://www.cnblogs.com/tianyu529/p/8952344.html
Copyright © 2011-2022 走看看