码迷,mamicode.com
首页 > 编程语言 > 详细

python 线程

时间:2018-08-24 00:29:09      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:star   相对   分派   设置   python解释器   并发   是否存活   上下文   bubuko   

一. 为什么要有线程

  进程是资源分配的最小单位,线程是CPU调度的最小单位.

  进程虽然可以提高计算机的利用率,但是进程还是有很多缺点,如果想同时做多件事,需要多进程;进程在执行的过程中,如果被阻塞,例如等待输入,整个进程就会被挂起,即使进程中有些工作不依赖于输入的数据,也无法执行.

 

二. 线程和进程的关系

  进程间的内存空间和资源时相互独立的,同一个进程内的线程是可以共享进程内的所有资源.某进程的线程在其他进程是不可见的.

  进程间的通信靠IPC(队列,管道),线程间可以直接读写进程的数据段

  线程上下文切换比进程的上下文切换要快的多.

  在多线程操作系统中,进程不是一个可以执行的实体.

 

三. 线程的特点

  线程的实体基本不拥有系统的资源,除了必不可少的要保证独立运行的资源

  线程的实体由代码块,数据块,TCP组成.线程是动态概念

  在多线程os中,线程是能独立运行的基本单位,因此也是独立调度和独立分派的基本单位.线程的切换是非常迅速的而且开销很小

  线程共享进程内的所有资源,所有线程都具有相同的进程的id

  在同一个或不同进程中的线程是可以并发执行的.

技术分享图片

  线程分为 : 

    用户级线程 : 内核的切换由用户(程序员)控制内核切换,不需要内核干涉,减少进出内核的消耗,但不能很好的利用多核CPU.

    内核级线程 : 线程切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.线程切换完成后要从内核态返回用户态,可以很好的利用多核的CPU.

 

四. GIL(全局解释器锁)

  将线程上锁,是CPython解释器上的一个锁,意思是在同一时间值允许一个线程访问CPU.

  因为GIL锁的存在,在CPython中,没有真正的线程并行. 但是有真正的 多进程并行. 

  总结 : 在Cpython中, IO密集用多线程,计算密集用多进程.

 

五. python线程中的模块

  1. threading模块 : 和进程中multiprocessing模块使用方法有很大的相似性

  2. Thread : 创建线程需要导入的模块 ( from threading import Thread )

  3. 线程的创建 : (普通创建和继承Thread类)

    t = Thread( target =    , args = ( ‘元组‘, ))

    t.start()

    class Xiancheng(Thread):

      def __init__(self):

        super().__init__()

  4. 线程的其他方法 : 

    相对于实例化对象的方法 :

      isAlive() : 判断线程是否存活

      getName() : 返回线程名

      setName() : 设置线程名

    threading模块的一些方法 :

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

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

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

  5. 守护线程 :

    守护进程,根据父进程的代码结束而结束.

    守护线程,根据父进程的执行结束而结束.

    

  

python 线程

标签:star   相对   分派   设置   python解释器   并发   是否存活   上下文   bubuko   

原文地址:https://www.cnblogs.com/dong-/p/9526388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!