携程的概念 协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。也就是说在同一线程内一段代码在执行过程中会中断然后跳转执行别的代码,接着在之前中断的地方继续开始执行,类似与yield操作。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态( 【Python3 携程yield及greenlet】 携程(Coroutine)是一种编程概念,它被称为微线程或纤程。在操作系统层面,线程由操作系统调度,而携程则由程序自身来控制执行流程。携程允许在同一个线程内,一个函数(子程序)执行到某个点时暂停,转而执行另一个函数,然后在合适的时机返回到之前暂停的地方继续执行。这种机制与`yield`关键字密切相关,因为`yield`可以创建生成器,生成器在执行过程中可以通过`yield`语句暂停并保存当前状态。 `yield`关键字在Python中扮演着重要的角色,它是生成器的核心。当一个函数包含`yield`语句时,该函数就变成了一个生成器。每次调用生成器的`next()`方法或者通过`for`循环迭代,生成器会从上次`yield`的地方继续执行,直到遇到下一个`yield`语句或者函数结束。这样,生成器就可以在执行流程中保存状态,从而实现携程的特性。 在上述的携程案例中,`customer`函数代表了一个顾客,它通过`yield`语句等待包子。`producter`函数则是制作包子的生产者,它通过调用`customer`生成器的`send`方法发送包子,并在每次发送后暂停,等待下一次的`send`调用。这段代码展示了如何通过`yield`来实现简单的携程交互。 然而,Python标准库中的携程功能较为基础,如果需要更高级的携程管理,如并发执行、异常处理等,可以借助第三方库,如`greenlet`。`greenlet`库提供了轻量级的协程实现,每个`greenlet`对象代表一个独立的执行流,它们共享同一堆栈空间,但有自己的局部变量和执行上下文。`greenlet.switch()`方法用于在不同的`greenlet`之间切换。 在`greenlet`实现的案例中,`func1`和`func2`是两个独立的执行流,它们通过`greenlet.switch()`在彼此之间切换执行。通过创建和切换`greenlet`对象,可以实现携程间的协同工作。 携程的主要优点包括: 1. **减少上下文切换开销**:由于携程在单个线程内运行,避免了线程上下文切换的开销,提高了性能。 2. **无锁同步**:携程间的通信和数据交换无需原子操作,减少了同步开销。 3. **简化控制流**:通过`yield`和`send`,可以轻松地控制执行流程,使得编程模型更加简洁。 4. **高并发能力**:携程可以在单个线程内实现高并发,适合于I/O密集型任务。 然而,携程也存在一定的缺点: 1. **无法利用多核资源**:由于携程本质上是单线程的,无法同时利用多个CPU核心,除非配合多进程进行。 2. **阻塞问题**:如果携程执行过程中涉及阻塞操作(如I/O),会阻塞整个程序,除非使用非阻塞I/O或异步编程。 Python中的携程和`greenlet`为开发者提供了轻量级的并发机制,适用于处理高并发的I/O密集型任务。但在CPU密集型计算或需要充分利用多核资源的情况下,可能需要考虑使用线程或多进程。
- 粉丝: 4
- 资源: 926
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- qaxbrowser-1.1.32574.52.exe (奇安信浏览器windows安装包)
- C#编写modbus tcp客户端读取modbus tcp服务器数据
- 某房地产瑞六补环境部分代码
- 基于Matlab实现无刷直流电机仿真(模型+说明文档).rar
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化
- 数组经典习题之顺序排序和二分查找和冒泡排序
- 永磁同步电机神经网络自抗扰控制,附带编程涉及到的公式文档,方便理解,模型顺利运行,效果好,位置电流双闭环采用二阶自抗扰控制,永磁同步电机三闭环控制,神经网络控制,自抗扰中状态扩张观测器与神经网络结合
- 基于 Oops Framework 提供的游戏项目开发模板,项目中提供了最新版本 Cocos Creator 3.x 插件与游戏资源初始化通用逻辑