摘要:
进程 数据隔离 数据不安全(数据共享Manager()) 操作系统级别的 开启关闭开销大 能利用多核 线程 数据共享 数据不安全(出现 if while += -=) 操作系统级别的 开启关闭开销小 Cpython解释器下不能利用多核 协程 数据共享 数据安全(协程之间的所有切换都时由用户进行切换的 阅读全文
摘要:
协程 协程是操作系统不可见的 什么是协程? 协程本质上就是一条线程,多个任务在一条线程上来回切换,来规避IO操作,就达到了我们将一条线程中的IO操作降到最低的目的。 gevent 第三方模块 gevent,利用了底层模块(greelet)完成切换 + 自动规避IO的功能 gevent模块不能规避所有 阅读全文
摘要:
池concurrent.futrues 什么是池? 要在程序开始的时候,还没提交任务,先创建几个线程或者进程放在一个池子里,这就是池 为什么要用池? 如果先开好进程/或线程,那么有任务之后就可以直接使用这个池中的数据了 开好的进程或线程会一直存在池中,可以被多个任务反复利用,这样极大的减少了开启,关 阅读全文
摘要:
判断数据是否安全 并发运用数据共享,异步,则数据不安全 并发运用+=,*=,-=,/=,赋值等则数据不安全 并发时运用if 、while 条件的则数据不安全 阅读全文
摘要:
进程队列queue 特点 能够实现进程之间的通信 数据安全 先进先出 实现原理 基于管道+锁 管道基于文件级别的socket+pickle实现的 from multiprocessing import Process from multiprocessing import Queue def f_p 阅读全文
摘要:
线程队列queue queue:线程之间数据安全的容器队列 原理:加锁 + 链表 Queue 先进先出 import queue q=queue.Queue(4) #fifo 先进先出的队列 4:设置列表长度为4,只能放4个数 q.put(1) #放入 print(q.get()) #取出 try: 阅读全文
摘要:
递归锁(RLock) 递归锁可以开启多个锁(开启几个就要关闭几个),经常用于解决死锁现象 将多个锁,改成同时使用一把递归锁 缺点:效率没有互斥锁高 代码 from threading import Thread,RLock a=0 def son1(rlock): with rlock: for i 阅读全文
摘要:
死锁现象 死锁现象的产生: 在开启多线程的时候使用多把锁A,B(互斥\递归)交替使用 规定必须拿到A才能使用B 小杨同时拿到A,B使用完释放锁的时候小王拿到了A,小刘拿到了B,两个人进入僵持状态,就形成了死锁。 解决方法: 将多个锁,改成同时使用一把递归锁 (经常用于突发解决死锁现象,缺点:执行效率 阅读全文
摘要:
dic 查看CPU运行指令 只要没有出现 STORE_GLOBAL,那么数据基本是安全的 import dis a=0 def func1(): global a a+=1 dis.dis(func1) ''' 0 LOAD_GLOBAL 0 (a) #在CPU中加载全局变量 2 LOAD_CONS 阅读全文
摘要:
守护进程和守护线程的对比 守护进程:守护进程会随着主进程的代码结束而结束,如果主进程结束之后还有其他子进程在运行,守护进程是不守护的, 在windows系统中开启线程需要加 if __name__ == 'main':,Linux,mac系统中则不用 from multiprocessing imp 阅读全文
摘要:
守护线程 为什么主线程会等子线程结束之后在结束? 主线程结束,进程就会结束 守护线程随着主线程的结束而结束 守护线程在主线程结束之后会守护其他子线程吗? 会 代码: import time from threading import Thread def son1(): while True: pr 阅读全文
摘要:
线程互斥锁和GIL的区别 1.线程互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共共享,当各个线程访问数据资源时会出现竞争状态,造成数据混乱); 2.GIL是Python解释层面的锁,解决解释器中多个线程的竞争资源问题(多个子线程在系统资源竞争是,都在等待对象 阅读全文
摘要:
线程锁(互斥锁)(Lock) 在开启多个线程的时候使用if、while、+-、\的时候会导致数据不安全(各个线程访问数据资源时会出现竞争状态,造成数据混乱)所以必须加锁 代码: from threading import Thread,Lock a=0 def son1(lock): with lo 阅读全文
摘要:
GIL锁(全局解释器锁)(线程) 什么是GIL锁? 1.GIL是Python解释层面的锁,解决解释器中多个线程的竞争资源问题(多个子线程在系统资源竞争是,都在等待对象某个部分资源解除占用状态,结果谁也不愿意先解锁,然后互相等着,程序无法执行下去)。 2.在Cpython解释器下,GIL(全局解释器锁 阅读全文
摘要:
线程 什么是线程:能被操作系统调度(给CPU执行)的最小单位 同一个进程中的多个线程可以同时被CPU执行 线程的优缺点: 优点:资源共享,效率高,开启关闭切换时间开销小,可以被多个CPU调度,由操作系统负责调度 缺点:数据不安全 同一进程中的线程资源共享,可以利用多核,操作系统调度,数据不安全,开启 阅读全文