今天先是看到多线程级别的内容,然后又看到协程的内容. 基本的领会是,协程是对异步回调方式的一种变换,同样是在一个线程内,协程通过主动放弃时间片交由其他协程执行来协作,故名协程. 而协程很早就有了,那时候因为协程不够公平,很可能不会主要交出执行权:现在卷土重来. 跟异步一样,为了减少线程间切换,而尽量在同一线程内进行不同逻辑的伪并行,其实是串行(回调的基础是epoll,因为nodejs是由libev实现的,libev是基于epoll的,只不过不同的平台可能用epoll,可能用kqueue).而ep…
另,线程的资源占用可见:http://www.cnblogs.com/charlesblc/p/6242111.html 进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html 线程一直是分系统级线程和用户级线程,也就是所谓的 1:1线程模型和 1:n线程模型.注意Linux2.4版本之前pthread用的LinuxThread实现,和Linux2.5以后pthread用的NPTL(据说比较好支持了POSIX线程标准)…
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发) 一丶同步,异步 同步:    所谓同步就是一个任务需要依赖另一个任务时,只有被依赖任务执行完毕之后,依赖的任务才会完成.这是可靠的任务序列.要么都成功,要么失败,两个任务的状…
1concurent.furtrue实现线程池与进程池 2协程 1concurent.furtrue实现线程池与进程池 实现进程池 #进程池 from concurrent.futures import ProcessPoolExecutor import os,time,random def task(n): print('%s is running' %os.getpid()) time.sleep(2) return n**2 if __name__ == '__main__': p=Pr…
concurrent.futures 异步执行进程线程池的模块,一个抽象类,定义submit,map,shutdown方法 from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor import time,os,random def task(n): print(os.getpid(),'is running') time.sleep(random.randint(,)) if __name__ == '__mai…
9.14 线程Event connect线程执行到event.wait()时开始等待,直到check线程执行event.set()后立即继续线程connect from threading import Event,current_thread,Thread import time event=Event() def check(): print('%s 正在检测服务是否正常....' %current_thread().name) time.sleep(3) event.set() ​ def…
死锁问题 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 经典问题:哲学家就餐问题 英语:Dining philosophers problem 是在计算机科学中的一个经典问题,用来演示在并发计算中多线程同步(Synchronization)时产生的问题. import time from threading import Thread,…
目录 1. 线程队列 1.1 先进先出(FIFO) 1.2 后进先出(LIFO)堆栈 1.3 优先级队列 2. 事件event 3. 协程 4. Greenlet 模块 5. Gevent模块 1. 线程队列 1.1 先进先出(FIFO) import queue q = queue.Queue(3) q.put('a') q.put('b') q.put('c') print(q.qsize()) # 队列大小 print(q.get()) print(q.get()) print(q.get…
一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可以利用进程池来创建,即current.futures模块中的ProcessPoolExecutor (2)ProcessPoolExecutor的基本方法 1. submit(fn,*args,**kwargs) # 异步提交任务 2. map(func, *iterables, timeout=N…
进程/线程池.协程.gevent第三方库 一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可以利用进程池来创建,即current.futures模块中的ProcessPoolExecutor (2)ProcessPoolExecutor的基本方法 1. submit(fn,*args,**kwargs) # 异步提交任务 2. map(func,…