摘要: Events不同线程之间同步对象 参数说明: # 实例化event对象 event = threading.Event() # 等待检测标志位被设定,标志位设置后就不阻塞了 # 客户机线程可以等待设置标志 event.wait() # 设置一个全局变量标志位True event.set() # 清空 阅读全文
posted @ 2018-01-02 19:58 kevin.Xiang 阅读(632) 评论(0) 推荐(0)
摘要: Semaphore信号量的使用 Semaphore信号量的使用 信号量: 互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。 使用场景: mysql连接池,线程池。可以在同一 阅读全文
posted @ 2018-01-02 19:47 kevin.Xiang 阅读(1861) 评论(0) 推荐(0)
摘要: 互斥锁Mutex的使用 互斥锁Mutex的使用 多个线程处理共享数据,数据会出现问题: 2.7之前每100指令切换一次GIL锁,线程就会sleep,线程会把前100条处理指令存放在CPU缓存内,切换GIL锁后放入另外一个线程再次处理同一条共享数据,如果我这条共享数据需要101条指令才能处理完,那么这 阅读全文
posted @ 2018-01-02 19:37 kevin.Xiang 阅读(6490) 评论(0) 推荐(0)
摘要: 递归锁: 递归锁: 互斥锁如果嵌套了多个锁之后,会将自己锁死永远都出不来了。 这个时候可以使用递归锁,它相当于一个字典,记录了锁的门与锁的对应值,当开门的时候会根据对应来开锁。 import threading # run1第二道锁 def run1(): print("grab the first 阅读全文
posted @ 2018-01-02 19:28 kevin.Xiang 阅读(1538) 评论(1) 推荐(1)
摘要: GIL全局解释器锁:为了解决多线程修改同一块数据。 GIL全局解释器锁:为了解决多线程修改同一块数据。 python的线程是调用操作系统的源生线程,启动时就是调用C语言的C源生接口,python调用C语言接口的线程去执行任务时,必须上下文对应关系传给CPU处理。 CPU处理python: 通过上下文 阅读全文
posted @ 2018-01-02 19:23 kevin.Xiang 阅读(397) 评论(0) 推荐(0)