协程(coroutine)
也叫:微线程,是一种用户态的轻量级线程,就是在单线程下实现并发的效果。
优点:
1:无需线程上下文切换的开销。(就是函数之间来回切换)
2:无需原子操作锁定及同步的开销。(如改一个变量就相当于一个原子操作,因为协程是在单线程内操作,属于串行,所以不需要锁的操作)
3:方便切换控制流,简化编程模型。
4:高并发+高扩展+低成本:一个CPU支持上万个协程都不是问题,所以很适合用于高并发处理。(因为它都在一个线程里处理)
缺点:
1:无法利用多核资源,协程的本质是个单线程,它不能同时将单个CPU上的多个核用上,协程需要和进程配合才能运行在多CPU上,一般用于CPU密集型
2:进行阻塞操作会阻塞掉整个程序
gevent (实现自动切换):是一个第三方库,可以通过gevent实现并发同步或异步编程,其中的主要模式是Greenlet,
greenlet (实现手动切换)由gevent进行了封装

举例:通过手动切换实现协程

 1 import gevent
 2 def fun1():
 3     print('输出函数1')
 4     gevent.sleep(2)
 5     print('函数1结束')
 6 def fun2():
 7     print('输出函数2')
 8     gevent.sleep(1)
 9     print('函数2结束')
10 def fun3():
11     print('输出函数3')
12     gevent.sleep(0)
13     print('函数3结束')
14 gevent.joinall([gevent.spawn(fun1),gevent.spawn(fun2),gevent.spawn(fun3)])生成3个函数的自动切换
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
  • 2021-07-05
  • 2022-12-23
猜你喜欢
  • 2021-08-21
  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
  • 2021-06-13
  • 2021-09-27
相关资源
相似解决方案