1 # 多道技术:让多个程序在内存中,遇到IO阻塞,切换到其他程序以达到CPU资源最大化的技术
2 # 分时系统:在CPU被程序长时间占用时,切换其他任务,以达到多个任务像是同时运行一样
3 
4 # 并行:在多核CPU中,每个核心一起并列执行任务,叫做并行
5 # 串行:对于一个CPU核心来说,按顺序执行每个任务,叫做串行
6 # 并发:对于一个CPU核心,在遇到IO阻塞,或者一个线程长时间占用CPU时,切换执行其他任务,以达到CPU最大效率的方式,就是并发

 

1 # 进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。
2 # 线程的维度要比进程更细,好比一列火车(进程),一节车厢(线程)

 

 1 # 同步:程序顺序执行过程中,执行一个任务,要等待一个任务执行结束,就是同步
 2 # 异步:程序执行过程,发送一个消息,但不管结果如何,继续执行,就是叫异步
 3 
 4 # 阻塞:CPU执行任务中,遇到IO接口,造成CPU等待的现象就是叫做阻塞
 5 # 非阻塞:CPU执行任务中,程序没有IO接口,CPU不会等待输入输出,就是非阻塞
 6 
 7 
 8 # 同步和异步与阻塞和非阻塞之间的关系:
 9     # 同步和异步是相对于被执行的任务而言,阻塞和非阻塞是相对执行任务的人(CPU)而言的
10     # 同步是要等执行结果返回之前,不能做其他事
11     # 异步是交给别人处理事情,告诉执行结果就行,自己做其他事
12     # 阻塞是处理一件事,需要返回结果,但是不影响做其他事
13     # 非阻塞是处理一件事,不需要等待返回结果,也直接去做其他事

 再看下面代码:

 1 import time
 2 from multiprocessing import Process, Queue
 3 
 4 def cook(plate):
 5     """
 6     厨师(生产者)
 7     """
 8 
 9     time.sleep(0.1)  # 厨师每0.1秒做出一个蛋糕
10     plate.put("蛋糕")
11     print("厨师做出了一块蛋糕...")
12 
13 def eat(plate):
14     """
15     食客(消费者)
16     """
17     while 1:
18         time.sleep(0.01)        # 每个食客每0.01秒就把蛋糕吃完了
19         cake = plate.get()
20         if cake==None:break
21         print("一块蛋糕被吃掉了")
22 
23 
24 if __name__ == '__main__':
25     plate = Queue()
26     lst = []
27     for i in range(3):
28         # 生成三个生产者
29         cooker = Process(target=cook, args=(plate, ))
30         cooker.start()
31         lst.append(cooker)
32     
33     eater = Process(target=eat, args=(plate, ))
34     eater.start()
35     # 产生了两个消费者
36     eater1 = Process(target=eat, args=(plate, ))
37     eater1.start()
38 
39     for j in lst:
40         j.join()
41         # 在生产者生产完成后
42     
43     plate.put(None)
44     plate.put(None)
45     # 发送两个None,确保每个消费者都得到一个None,
46     # 既可以蛋糕都被吃掉,也避免厨师不作蛋糕了,食客还在等待

 

相关文章:

  • 2021-10-28
  • 2021-07-30
  • 2021-08-27
  • 2021-11-26
  • 2021-09-02
  • 2021-09-02
  • 2021-05-31
猜你喜欢
  • 2021-12-11
  • 2021-11-13
  • 2021-07-26
  • 2021-09-08
  • 2021-04-25
  • 2021-06-09
  • 2022-02-24
相关资源
相似解决方案