协程:

  基于单线程来实现并发。

  协程并不是实际存在的实体,本质上是一个线程的多个部分。

  比线程的单位更小——协程,纤程,在一个线程中可以开启很多协程。

  在执行程序的过程中,遇到 IO 操作就冻结当前位置的状态,去执行其他任务,在执行其他任务的过程中,会不断地检测上一个冻结的任务是否 IO 结束,如果 IO 结束了,就继续从冻结的位置开始执行。

  一个线程不会遇到阻塞——一直在使用CPU。

  多个线程——只能有一个线程使用CPU。

  协程比线程之间的切换和线程的创建销毁所花费的时间,空间开销要小的多。

协程的特点:冻结当前程序/任务的执行状态,可以规避IO操作的时间。

import time
def producer():
    res = []
    for i in range(1000000):
        res.append(i)
    return res

def consumer(res):
    for i in res:pass

start = time.time()
res = producer()
consumer(res)
print(time.time()-start) # 0.26484227180480957

def producer():
    for i in range(1000000):
        yield i
def consumer():
    g = producer()
    for i in g:pass

start = time.time()
consumer()
print(time.time() - start)  # 0.09993767738342285

import time
def consumer():
    while True:
        x=yield

def producer():
    g=consumer()
    next(g)
    for i in range(10000000):
        g.send(i)
start = time.time()
producer()
print(time.time() - start)  # 1.6259949207305908

# 单纯的切换,还是要耗费一些时间的,记住当前执行的状态。
# 用时间换了空间
协程的引子

相关文章:

  • 2022-03-05
  • 2022-12-23
猜你喜欢
  • 2021-11-06
  • 2018-04-28
  • 2019-08-22
  • 2021-11-07
相关资源
相似解决方案