上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页
摘要: 引言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态。 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过 阅读全文
posted @ 2024-03-03 11:32 Xiao0101 阅读(82) 评论(0) 推荐(0)
摘要: 引言 首先,需要注意一下:不能无限的开进程,不能无限的开线程,最常用的就是开进程池,开线程池。 其中,回调函数非常重要,回调函数其实可以作为一种编程思想,谁好了谁就去掉只要你用并发,就会有锁的问题,但是你不能一直去自己加锁吧。 那么我们就用QUEUE,这样还解决了自动加锁的问题,但是由Queue延伸 阅读全文
posted @ 2024-03-03 11:32 Xiao0101 阅读(245) 评论(0) 推荐(0)
摘要: 队列queue介绍 queue用于建立和操作队列,常和threading类一起用来建立一个简单的线程队列。 首先,队列有很多种,根据进出顺序来分类,可以分成 queue.Queue(maxsize) FIFO(先进先出队列) queue.LifoQueue(maxsize) LIFO(先进后出队列) 阅读全文
posted @ 2024-03-03 11:31 Xiao0101 阅读(42) 评论(0) 推荐(0)
摘要: 定时器 定时器,指定n秒后执行某操作 简易版: from threading import Timer def task(name): print('hello %s' % name) t = Timer(5, task, args=('xiao',)) t.start() # hello xiao 阅读全文
posted @ 2024-03-03 11:30 Xiao0101 阅读(17) 评论(0) 推荐(0)
摘要: 条件Condition(了解) 使得线程等待,只有满足某条件时,才释放n个线程 import threading def run(n): con.acquire() con.wait() print("run the thread: %s" % n) con.release() if __name_ 阅读全文
posted @ 2024-03-03 11:30 Xiao0101 阅读(19) 评论(0) 推荐(0)
摘要: Event事件 事件处理的方法: event.is_set():返回event的状态值; event.wait():如果 event.isSet()==False将阻塞线程; event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度; even 阅读全文
posted @ 2024-01-21 21:58 Xiao0101 阅读(52) 评论(0) 推荐(0)
摘要: 信号量Semaphore Semaphore管理一个内置的计数器, 每当调用acquire()时内置计数器-1; 调用release() 时内置计数器+1; 计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。 代码示例: import random i 阅读全文
posted @ 2024-01-21 21:58 Xiao0101 阅读(32) 评论(0) 推荐(0)
摘要: 死锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁 代码解释: import time from threading imp 阅读全文
posted @ 2024-01-21 21:58 Xiao0101 阅读(34) 评论(0) 推荐(0)
摘要: 引言 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代 阅读全文
posted @ 2024-01-21 21:57 Xiao0101 阅读(43) 评论(0) 推荐(0)
摘要: 工作原理是将并行变成局部串行,牺牲了效率,保证了数据的安全。 未加锁: import time from threading import Thread n = 100 def task(): global n # mutex.acquire() temp = n time.sleep(0.1) n 阅读全文
posted @ 2024-01-21 21:56 Xiao0101 阅读(16) 评论(0) 推荐(0)
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页