Python程序设计 课件 第八章.pptx

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第八章多线程Python程序设计

01线程概述02使用Python实现多线程03综合案例:基于多线程的爬虫应用04本章回顾

01线程概述1.什么是进程进程是操作系统资源分配和调度的基本单位。计算机使用时多个同时运行的软件程序,程序代码存于磁盘,加载到内存由CPU执行,运行中可能与外设交互、产生数据,操作系统将运行程序封装成进程并按调度算法切换执行,可按“Ctrl+Alt+Delete”打开任务管理器查看进程。

01线程概述2.什么是线程在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。后来随着计算机行业的发展,程序功能的设计越来越复杂,而某些活动随着时间的推移会被阻塞,此时就想到能否将这些应用程序分解成更细粒度的实体,并且这些细粒度的执行实体可以共享进程的地址空间,所以就出现了线程的概念。线程是操作系统能够进行运算调度的最小单位,可以看做是轻量级的进程,线程之间切换的开销小,所以线程的创建、销毁、调度性能远远优于进程。

01线程概述3.进程和线程的区别进程和线程分工明确,进程有主线程,负责分配管理资源,线程负责CPU调度运算,是CPU切换时间片最小单位。一个进程多个线程,线程共享进程堆和方法区资源,各有自己的程序计数器和栈区域。

01线程概述?方法区:用来存放加载的类、常量等信息。?堆:是进程中最大的一块内存空间。?栈:用于存储该线程的局部变量(私有的)和栈祯。?计数器:一块内存区域,用来记录线程当前要执行的指令地址。关于进程与线程的区别总结如右图所示。

多线程相关概念1.什么是多线程多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。举一个生活中的例子,如果你吃完水果再看电视就是单线程,而一边吃水果一边看电视就是多线程。在拥有多核的机器上,使用多线程技术,可以明显提升系统的执行效率。

多线程相关概念2.并发与多线程多线程可以实现任务并发执行,并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。多线程并发执行过程中需要注意线程安全的问题,即当多个线程同时操作共享变量时,会出现某个线程更新共享变量的值,但是其它线程获取到的是共享变量没有被更新之前的值,这将导致数据不准确,可以使用多线程同步和加锁解决此问题。

多线程相关概念3.线程的生命周期当线程被创建并启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,其要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态,这5种状态也叫线程的生命周期,如下图所示。

多线程相关概念(1)新建状态当使用新建线程的方法建立一个线程后,该线程对象处于新建状态,注意此时线程未被启动。(2)就绪状态当处于新建状态的线程,通过调用开始启动线程方法进入到就绪状态,此时线程已经被启动,具备了运行条件,正在等待被分配CPU资源。简单理解就是处于就绪状态的线程已经做好了运行准备,等获取到CPU资源后就可以被运行。(3)运行状态就绪态线程获CPU资源进入运行态。单CPU时某时刻仅一个线程运行,多CPU时可多线程并行。运行线程按调度策略和优先级调度,不会一直占CPU。运行态线程时间片内正常结束进死亡态,否则回就绪态。

多线程相关概念(4)阻塞状态当处于运行状态的线程遇到某些情况就会进入到阻塞状态,如:?调用了sleep()方法主动放弃其所占用的处理器资源。?等待I/O流的输入输出。?等待网络资源。?试图获得一个锁对象,但该锁对象正被其它线程所持有。?等待某个通知。当引起阻塞的原因消除后,线程就会重新转入到就绪状态。(5)死亡状态线程生命周期的最后一个阶段就是死亡状态,进入死亡状态的原因主要可总结如下:?正常运行的线程完成了全部的工作。?线程抛出未捕获的异常。?线程被强制性终止。需要注意的是主线程死亡,并不意味着所有线程全部死亡。也就是说,主线程的死亡,不会影响子线程继续执行,反之亦然。

02使用Python实现多线程Python3的_thread库和threading库支持线程,重点介绍threading库多线程实现。Python的GIL使同一时间仅一个线程能用CPU,其多线程虽不能提高CPU利用率,但能提高程序I/O(磁盘和网络读写)访问速度。

使用threading实现多线程1.普通方式实现多线程接下来我们可以先定义2个函数,然后模拟多线程的实现过程,如右图所示。

使用threading实现多线程在上面代码中,函数study1()和stu

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档