
并发编程
文章平均质量分 74
i0208
石匠
展开
-
python 异步编程 asyncio
协程协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行在Python中有多种方式可以实现协程,例如:greenlet,是一个第三方模块,用于实现协程代码(Gevent协程就是基于greenlet实现) yield,生成器,借助生成器的特点也可以实现协程代码。 asyncio,在Python3.4中引入的模块用于编写协程代码。 async & awiat,在Python3.5中引入的两个关键字,结合as原创 2022-03-17 23:50:20 · 5480 阅读 · 0 评论 -
IO多路复用
什么是IO, 同步IO, 异步IO,阻塞,非阻塞简单的理解: IO在计算机中指Input/Output,也就是输入和输出。由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:同步IO:第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;原创 2020-05-29 00:10:13 · 208 阅读 · 0 评论 -
threading.local()
同一个进程下的多线程共享同一份数据,多线程操作同一份数据为了保证数据的安全性,通常需要加锁,锁虽然保证了数据安全但效率低threading.local()可以为每个线程创建自己的局部名称空间, 放入到该局部空间的数据不会被其他线程干扰import threadinglocal_values = threading.local() def func(num): # 使用 threading.local() local_values.name = num import原创 2020-05-11 21:23:25 · 931 阅读 · 0 评论 -
协程
协程:是单线程下的并发,又称微线程,纤程。协程的本质就是在单线程下,由用户自己通过代码控制一个任务遇到IO阻塞了就切换到另一个任务去执行,以此来提升效率,给操作系统的感觉是你这个线程没有任何的IO(而是在来回切换),从而保证程序在 就绪态 运行态来回切换.为了实现它,我们需要找寻一种可以同时满足控制多个任务切换和雀环之前保存状态的解决方案.协程是一种用户态的轻量级线程,即协程是由用户程...原创 2020-01-27 10:25:56 · 170 阅读 · 0 评论 -
python 线程池,进程池
进程池/线程池开进程开线程都需要消耗资源,只不过两者比较的情况下线程的资源消耗的较小所以我们要在计算机能够承受的范围内最大限度的利用计算机在保证计算机硬件的安全情况下最大限度的利用计算机的资源池其实是江都了程序的运行效率,但是保证了计算机永健的安全concurrent.futures 模块pool = ProcessPoolExecutor() 进程池 括号内可以传参数指...原创 2020-01-27 10:25:45 · 852 阅读 · 0 评论 -
GIL全局解释器锁
官方解释python解释器有很多种 最常见的就是Cpython解释器GIL本质也是一把互斥锁:将并发变成串行牺牲效率保证数据的安全 用来阻止同一个进程下的多个线程的同时执行(同一个进程内多个线程无法实现并行但是可以实现并发)GIL的存在是因为CPython解释器的内存管理不是线程安全的,这种不安全是来自于垃圾回收机制,每个进程下都会有一个内存管理线程在一个python的进程内,...原创 2020-01-27 10:25:39 · 186 阅读 · 0 评论 -
线程 join daemo Semaphore Event
线程相关的其他方法Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程变量。 # threading.enumerate(): 返回一个包含正在运行的线程的...原创 2020-01-27 10:25:33 · 274 阅读 · 0 评论 -
创建线程
threading Threadfrom threading import Threadimport timedef func(name): print('%s running'%name) time.sleep(3) print('over')# 创建线程对象 开线程不需要在__main__代码内,但是习惯性还是写在__main__内t = Thre...原创 2020-01-26 15:57:25 · 203 阅读 · 0 评论 -
线程
什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。一个进程内可以开启多个线程,并且线程与线程之间数据是共...原创 2020-01-26 15:38:44 · 157 阅读 · 0 评论 -
生产者消费者模型 JoinableQueue
概念在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一...原创 2020-01-26 14:42:00 · 490 阅读 · 0 评论 -
Queue模块 进程间通信
进程与进程之间数向后隔离的,实现进程之间的通信可以采用文件的方式或者队列方法1.文件的方式 速度慢,要自己加锁,容易导致死锁2.队列Queue的方式(IPC) 管道+锁,不需要自己处理锁队列Queue创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。大白话总结一下就是队列支持多个人从队列的一端放入数据,同样支持多个人从队列的另一端取...原创 2020-01-26 14:31:46 · 265 阅读 · 0 评论 -
互斥锁 Lock
进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理1.锁将并发变成了串行,牺牲了运行效率,但避免了竞争2.锁在主进程中实例化产生,在子进程中使用3.在修改数据处加锁,修改不同的数据用不同的锁from multiprocessing import Process, Lock...原创 2020-01-26 14:20:01 · 290 阅读 · 0 评论 -
join,僵尸进程,守护进程
join主进程等待子进程运行结束后再运行from multiprocessing import Processimport timedef func(name, i): print('%s 进程 running'%name) time.sleep(i) print('%s 进程 over'%name)if __name__ == '__main__'...原创 2020-01-26 14:16:18 · 238 阅读 · 0 评论 -
创建进程
所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程。多个进程可以实现并发效果,也就是说,当我们的程序中存在多个进程的时候,在某些时候,就会让程序的执行速度变快multiprocess模块multiprocess不是一个模块而是python中一个操作、管理进程的包,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非...原创 2020-01-26 13:49:54 · 427 阅读 · 0 评论 -
进程
概念进程:正在进行的一个过程或者说一个任务。是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个抽象概念,所有多道程序设计操作系统都建立在进程的基础上。1.进程是指运行的应用程序,内存空间,操作系统的调度称为一个进程2.进程是竞争计算机系统有限资源...原创 2020-01-26 13:09:09 · 407 阅读 · 0 评论