分类目录:编程

以下是分类 编程 下的所有文章

协程

一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)的情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制): 第一种情况是该任务发生了阻塞 第二种种情况是该任务计算的时间过长或有一个优先级更高的程序替代了……

异步调用与回调机制

提交任务的两种方式: 1. 同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果,再执行下一步代码,导致程序是串行执行。 来看一个拉粑粑的例子: from concurrent.futures import ThreadPoolExecutor import time, random def la(name): print(“%s ……

进程池和线程池

在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪,于是我们必须对服务端开启的进程数或线程数加以控制,让机器在一个自己可以承受的范围内运行,这就是进程池或线程池的……

多线程-线程queue

queue is especially useful in threaded programming when information must be exchanged safely between multiple threads. 进程queue:用于进程之间共享数据,因为多个进程内存空间是隔离的。 线程queue:可以不用关心锁的……

多线程-信号量 Semaphore, Event, 定时器 Timer

一、信号量 Semaphore 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是一定的,这便是信号量……

多线程-死锁与递归锁

一、死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁: from threading import Thread, Lock import time mute……

多线程-互斥锁

从例子出发,来看需求: n=100, 启动100个线程,每个线程对n-1,运行完后输出最后结果。   来看我们一般的做法: 这儿已n=3为例: from threading import Thread import time n = 3 def task(): global n temp = n time.sleep(0.1) ……