美文网首页
二十三:Python之多线程

二十三:Python之多线程

作者: 项啊丑 | 来源:发表于2020-04-15 22:39 被阅读0次

线程:多任务的另一种方式

一个进程中,也经常需要同时做多件事,就需要同时运行多个 ‘子任务’,这些 ‘子任务’ 就是线程

线程又被称为轻量级进程(lightweight process),是更小的执行单元

    1.一个进程拥有多个并行的线程,当中每个线程,共享当前线程的资源

    2.一个进程中的线程共享相同的内存单元(内存地址空间),可以访问相同的变量和对象,而且它们从同一堆中分配对象(通信、数据交换、同步操作)

    3.由于线程间的通信在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且传递的速度也更快

线程和进程的区别

1.进程是系统进行资源分配和调度的一个独立单位

2.进程在执行任务的过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率

3.一个程序至少有一个进程,一个进程至少拥有一个线程

4.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位

5.线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以与同属一个进程的其他线程共享进程的所有资源

6.线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高

7.线程不能独立运行,必须依存于进程

8.线程执行开销小,但不利于资源的管理和保护;进程刚好相反

多线程

python的thread模块是比较底层的模块,在各个操作系统中表现形式不同(低级模块)

python的threading模块是对thread模块的封装,可以更加方便的被使用(高级模块)

创建多线程

线程的五种状态

1.新状态:线程对象已经创建,还没有调用start方法

2.可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态;当start方法调用时,线程首先进入可运行状态,在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

3.运行状态:程序调度程序从可运行池中选择一个线程当作当前线程时线程所处的状态,这也是线程进入运行状态的唯一方式。

4.等待/组赛/睡眠状态:这是线程有资格运行时它所处的状态。实际上这三种状态组合成一种,共同点是 ‘线程仍旧是活的(可运行)’,但是当前没有条件运行;但是如果某件事件出现,它可能返回到可运行状态。

5.死亡态:当线程的run方法完成时就认为它死去了。这个线程对象也许是活的,但是它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。如果在一个死亡的线程上调用start方法,会抛出异常

多线程程序的执行循序是不确定的(操作系统决定);当执行到sleep语句是,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runable)状态,等待调度;线程调度将自行选择一个线程执行;代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定

线程共享全局变量

在一个进程内的所有线程共享全局变量,多线程之间的数据共享,缺点是可能造成多个线程同时修改一个变量(线程非安全),可能造成混乱

线程同步

1.当多个线程几乎同时修改某一个共享数据时,需要进行同步控制

2.线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁

3.互斥锁保证了每次只有一个线程进行写入操作,从而保证多线程下数据的正确性(原子性)

4.互斥锁为资源引入一个状态:锁定/非锁定;某个线程要更改共享数据时,先将其锁定,此时资源的状态为 ‘锁定’,其他线程不能更改,直到该线程释放资源,将资源的状态变为 ‘非锁定’,其他的线程才能再次锁定该资源。

5.threading模块中定义了Lock模块,可以方便的处理锁定

如果没有互斥锁,num的结果大部分是小于20000的

相关文章

  • 二十三:Python之多线程

    线程:多任务的另一种方式 一个进程中,也经常需要同时做多件事,就需要同时运行多个 ‘子任务’,这些 ‘子任务’ 就...

  • Python多线程

    目录:一、线程的创建二、多线程互斥锁三、线程间通信四、线程池 Python并发之多线程 一、线程的创建 单线程示例...

  • python之多线程

    注:本文是廖大的教程文章,本人也在学习,因为老是记不住,自己手打一边,代码也是亲自测试。廖大传送门 多进程 多个任...

  • Python之多线程

    什么是线程? 要弄清楚线程的定义,往往就要和进程相互比较,从比较中才能更准确地明白一个东西的定义。首先有个数量关系...

  • python之多线程

    进程的概念:以一个整体的形式暴露给操作系统管理,里面包含各种资源的调用。 对各种资源管理的集合就可以称为进程。线程...

  • python之多线程

    1. 相关概念 1.1 解释器 Python 解释器的主要作用是将我们在 .py 文件中写好的代码交给机器去执行,...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • python多线程

    python基础之多线程锁机制 GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析...

  • iOS开发之多线程(5)—— Pthreads

    文集 iOS开发之多线程(1)—— 概述iOS开发之多线程(2)—— ThreadiOS开发之多线程(3)—— G...

  • iOS开发之多线程(4)—— Operation

    文集 iOS开发之多线程(1)—— 概述iOS开发之多线程(2)—— ThreadiOS开发之多线程(3)—— G...

网友评论

      本文标题:二十三:Python之多线程

      本文链接:https://www.haomeiwen.com/subject/hmhfvhtx.html