python协程概念

python协程概念,第1张

概述什么是协程 协程是单线程下的并发,又称微线程,纤程。它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。英文名 什么是协程

协程是单线程下的并发,又称微线程,纤程。它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带cpu的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。英文名Coroutine。一句话说明什么是协程:在一个线程中的某个函数中,我们可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的 ,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定。

线程和协程的区别:

线程的切换是一个cpu在不同线程中来回切换,是从系统层面来,不止保存和恢复cpu上下文这么简单,会非常耗费性能。但是协程只是在同一个线程内来回切换不同的函数,只是简单的 *** 作cpu的上下文,所以耗费的性能会大大减少。
需要强调的是:

python的线程属于内核级别的,即由 *** 作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换至其他线程运行)单线程内开启协程,一旦遇到io,就会从应用程序级别(而非 *** 作系统)控制切换,以此来提升效率(!!!非io *** 作的切换与效率无关)
对比 *** 作系统控制线程的切换,用户在单线程内空盒子协程的切换有以下优缺点:
优点:协程的切换开销更小,属于程序级别的切换, *** 作系统完全感受不到,因而更加轻量级单线程内就可以实现并发的效果,最大限度地利用cpu
缺点:协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程python协程模块-Gevent使用

Gevent是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet。示例如下:

import geventg1 = gevent.spawn(func,1,2,3,x=4,y=5)func后都是参数g2 = gevent.spawn(func2)g1.join() #等待g1结束g2.join() #或者上述两步合作一步:gevent.joinall([g1,g2])g1.value #拿到func1的返回值
总结

以上是内存溢出为你收集整理的python协程概念全部内容,希望文章能够帮你解决python协程概念所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1189796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存