摘要: 协程基础 一、引言 之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把CPU的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建进程、创建线程、以及管理他们之间的切换。 随着我 阅读全文
posted @ 2019-09-22 17:52 半哑Lin 阅读(166) 评论(0) 推荐(0) 编辑
摘要: Python程序中的线程操作 concurrent模块 一、Python标准模块——concurrent.futures 官方文档:https://docs.python.org/dev/library/concurrent.futures.html 二、介绍 concurrent.futures模 阅读全文
posted @ 2019-09-22 17:51 半哑Lin 阅读(606) 评论(0) 推荐(1) 编辑
摘要: Python程序中的线程操作 锁 一、同步锁 1.1多个线程抢占资源的情况 1.1.1对公共数据的操作 1.2同步锁的引用 1.3互斥锁与join的区别 有的同学可能有疑问:既然加锁会让运行变成串行,那么我在start之后立即使用join,就不用加锁了啊,也是串行的效果啊 没错:在start之后立刻 阅读全文
posted @ 2019-09-22 17:50 半哑Lin 阅读(1213) 评论(0) 推荐(1) 编辑
摘要: Python程序中的线程操作 线程队列 一、线程队列 queue队列:使用 ,用法和进程Queue一样 当必须在多个线程之间安全地交换信息时,队列在线程编程中尤其有用。 二、先进先出 三、后进先出 四、存储数据时可设置优先级的队列 4.1优先级队列 4.2更多方法说明 Constructor for 阅读全文
posted @ 2019-09-22 17:50 半哑Lin 阅读(562) 评论(0) 推荐(1) 编辑
摘要: Python程序中的线程操作 守护线程 一、守护线程 无论是进程还是线程,都遵循:守护XX会等待主XX运行完毕后销毁。需要强调的是:运行完毕并非终止运行。 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算 阅读全文
posted @ 2019-09-22 17:49 半哑Lin 阅读(599) 评论(0) 推荐(0) 编辑
摘要: GIL全局解释器锁 一、GIL全局解释器锁 GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。 Python代码的执行由Python虚拟机(也叫解释器循环)来控制。Python在设计之初就考虑到 阅读全文
posted @ 2019-09-22 17:48 半哑Lin 阅读(136) 评论(0) 推荐(0) 编辑
摘要: Python程序中的线程操作 创建多线程 一、Python线程模块的选择 Python提供了几个用于多线程的编程的模块,包括thread、threading和Queue等。thread和threading模块允许程序员创建和管理线程。thread模块提供了基本的线程和锁的支持,threading提供 阅读全文
posted @ 2019-09-22 17:48 半哑Lin 阅读(2864) 评论(0) 推荐(0) 编辑
摘要: 内存中的线程 一、内存中的线程 多个线程共享同一个进程的地址空间中的资源,是对一台计算机上多个进程的模拟,有时也称线程为轻量级的进程。 而对一台计算机上多个进程,则共享物理内存、磁盘、打印机等其他物理资源。多线程的运行与多进程的运行类似,是CPU在多个线程之间的快速切换。 不同的进程之间是充满敌意的 阅读全文
posted @ 2019-09-22 17:47 半哑Lin 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 进程和线程的区别 一、进程和线程的关系 线程与进程的区别可以归纳为以下4点: 1. 地址空间和其他资源(如打开文件):进程间相互独立,统一进程的个线程间共享。某进程内的线程在其他进程不可见。 2. 通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信—需要进程同步和互斥手段的 阅读全文
posted @ 2019-09-22 17:41 半哑Lin 阅读(912) 评论(0) 推荐(0) 编辑
摘要: 使用线程的实际场景 一、使用线程的实际场景 开启一个字处理软件进程,该进程肯定需要办不止一件事情,比如监听键盘输入,处理文字,定时自动将文字保存到硬盘,这三个任务操作的都是同一块数据,因而不能用多进程。只能在一个进程里并发地开启三个线程,如果是单线程,那就只能是,键盘输入时,不能处理文字和自动保存, 阅读全文
posted @ 2019-09-22 17:41 半哑Lin 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 线程基础 一、线程概念的引入背景 1.1进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多 阅读全文
posted @ 2019-09-22 17:40 半哑Lin 阅读(168) 评论(0) 推荐(0) 编辑
摘要: Python程序中的进程操作 进程池(multiprocess.Pool) 一、进程池 为什么要有进程池?进程池的概念。 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时 阅读全文
posted @ 2019-09-22 17:39 半哑Lin 阅读(1539) 评论(0) 推荐(0) 编辑
摘要: Python程序中的进程操作 进程间数据共享(multiprocess.Manager) 一、进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。 这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展 阅读全文
posted @ 2019-09-22 17:30 半哑Lin 阅读(315) 评论(0) 推荐(0) 编辑
摘要: Python程序中的进程操作 进程间通信 一、进程间通信 IPC(Inter Process Communication) 二、队列 2.1概念介绍——multiprocess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。 创建共享的进程 阅读全文
posted @ 2019-09-22 17:28 半哑Lin 阅读(921) 评论(0) 推荐(1) 编辑
摘要: Python程序中的进程操作 进程同步(multiprocess.Lock) 一、多进程抢占输出资源 二、使用锁维护执行顺序 上面这种情况虽然使用枷锁的形式实现了顺序的执行,但是程序又变成串行了,这样确实会浪费了时间,却保证了数据的安全。接下来,我们以模拟抢票为例,来看看数据安全的重要性。 三、多进 阅读全文
posted @ 2019-09-22 17:27 半哑Lin 阅读(1185) 评论(0) 推荐(0) 编辑
摘要: Python程序中的进程操作 开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程。多个进程可以实现并发效 阅读全文
posted @ 2019-09-22 17:26 半哑Lin 阅读(5376) 评论(0) 推荐(0) 编辑
摘要: 进程的创建和结束 一、进程的创建 但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要创建进程的方式,一些操作系统只为一个应用程序设计,比如微波炉中的控制器,一旦启动的微波炉,所有进程都已经存在。 而对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销进程的能力,主要 阅读全文
posted @ 2019-09-22 17:24 半哑Lin 阅读(548) 评论(0) 推荐(0) 编辑
摘要: 同步异步阻塞非阻塞 一、状态介绍 在了解其他概念之前,外面首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。 1. 就绪(Ready)状态:当进程已分配到除CPU以外的所有必要资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态 阅读全文
posted @ 2019-09-22 17:22 半哑Lin 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 进程的并行和并发 一、进程的并行和并发 并行:并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU) 并发:并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A,交替使用,目的是提高 阅读全文
posted @ 2019-09-22 17:21 半哑Lin 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 进程调度 要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 一、先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可以用于进程调度。FCFS算法比较有利于长作业(进程) 阅读全文
posted @ 2019-09-22 17:20 半哑Lin 阅读(412) 评论(0) 推荐(0) 编辑