当前位置: 首页 > wzjs >正文

网站的优化与推广分析百度推广销售

网站的优化与推广分析,百度推广销售,公司注册网上查询,wordpress邮箱找回密码协程(coroutine)与生成器(generator)在 Python 中看似相似(均使用 yield 或 await 暂停执行),但底层实现和设计目标存在显著差异。以下从执行机制、内存管理和应用场景三个维度解析其异同&#…

协程(coroutine)与生成器(generator)在 Python 中看似相似(均使用 yieldawait 暂停执行),但底层实现和设计目标存在显著差异。以下从执行机制内存管理应用场景三个维度解析其异同:


1. 底层实现的演变与核心差异

(1) 生成器(Generator)
  • 本质:通过 yield 关键字实现的惰性迭代器,用于按需生成数据。
  • 实现机制
    • 生成器函数被调用时,返回一个生成器对象(类型为 generator)。
    • 生成器对象内部维护一个栈帧(frame),保存局部变量和执行位置(f_lasti 指针)。
    • 每次调用 next()send() 时,恢复执行到 yield 处,并挂起当前状态。
  • 底层数据结构
    # 生成器对象的 C 结构(CPython 源码示例)
    typedef struct {PyObject_HEADPyFrameObject *gi_frame;          # 当前执行栈帧PyObject *gi_code;                # 字节码对象PyObject *gi_weakreflist;          # 弱引用列表// ...
    } PyGenObject;
    
(2) 协程(Coroutine)
  • 本质:通过 async/await 实现的异步任务调度单元,用于非阻塞并发。
  • 实现机制
    • 协程函数(async def)被调用时,返回一个协程对象(类型为 coroutine)。
    • 协程对象依赖**事件循环(Event Loop)**调度,通过 await 挂起并让出控制权。
    • 底层基于**生成器协程(Python 3.4 的 @asyncio.coroutine)**演化,但优化了异步语义。
  • 底层数据结构
    # 协程对象的 C 结构(CPython 源码示例)
    typedef struct {PyObject_HEADPyObject *cr_origin;              # 协程创建位置(调试用)PyObject *cr_frame;               # 协程栈帧PyObject *cr_code;                # 字节码对象// ...
    } PyCoroObject;
    

2. 关键异同对比

特性生成器(Generator)协程(Coroutine)
设计目标惰性数据生成异步并发与协作式多任务
暂停/恢复机制yield 暂停,外部 next() 恢复await 暂停,事件循环调度恢复
对象类型generatorcoroutineasync_generator
执行驱动方外部调用者(手动迭代)事件循环(自动调度)
状态管理仅维护栈帧和局部变量额外维护任务状态(如 Future 对象)
异常传播通过 throw() 注入异常由事件循环统一处理异常
内存消耗轻量(单次迭代状态)较重(需维护任务链和回调)
典型应用场景大数据流处理、惰性计算高并发I/O操作(如网络请求、文件读写)

3. 执行流程的底层差异

(1) 生成器的挂起与恢复
def gen():yield 1yield 2g = gen()
print(next(g))  # 输出1
print(next(g))  # 输出2
  • 底层操作
    1. 调用 gen() 创建生成器对象,状态为 GEN_CREATED
    2. next(g) 触发 gi_frame 执行,直到遇到 yield,状态变为 GEN_SUSPENDED
    3. 再次调用 next(g) 恢复 gi_frame 执行。
(2) 协程的调度与执行
async def coro():await asyncio.sleep(1)print("Done")async def main():await coro()asyncio.run(main())
  • 底层操作
    1. asyncio.run() 创建事件循环,调度 main() 协程。
    2. await coro() 挂起 main(),将控制权交还事件循环。
    3. 事件循环监控 asyncio.sleep(1) 的完成状态,1秒后恢复 coro() 执行。

4. 性能优化与实现细节

  • 生成器的局限性
    • 无法直接嵌套 yieldyield from 以外的异步操作。
    • 手动管理迭代流程,难以实现高并发。
  • 协程的优化
    • async/await 语法糖:将协程与生成器解耦,避免语义混淆。
    • Task 对象封装:协程被包装为 Task,由事件循环统一调度。
    • 零拷贝挂起:通过 await 直接切换协程,减少上下文切换开销。

5. 从生成器到协程的演化

  • Python 3.4:通过 @asyncio.coroutineyield from 实现协程(基于生成器)。
  • Python 3.5:引入原生协程(async def)和 await 关键字,与生成器分离。
  • Python 3.7asyncawait 成为正式关键字,协程性能进一步优化。

总结

  • 相同点:均通过暂停/恢复机制实现非阻塞执行,依赖状态保存与恢复。
  • 不同点
    • 生成器是同步的、迭代驱动的,设计目标为数据生成;
    • 协程是异步的、事件循环驱动的,设计目标为高并发任务调度。
  • 选择建议
    • 需要惰性生成数据 → 使用生成器;
    • 需高并发处理I/O密集型任务 → 使用协程(配合 asyncio)。
http://www.dtcms.com/wzjs/360928.html

相关文章:

  • vue 实现网站开发产品推广方案范例
  • 微信网站开发制作平台网站报价
  • 建设银行官方网站买五粮液酒太原seo关键词优化
  • java web网站开发视频教程seo营销服务
  • 怎么自己做刷qq网站厦门网站快速排名优化
  • 网站 divwordpress免费建站
  • 做网站推广对电脑有什么要求百度推广助手手机版
  • 烟台提供网站设计制作业务推广网站
  • 建设协会网站著名的个人网站
  • 生物科技公司网站建设网络营销工具
  • 南宁网站设计多少钱护肤品软文推广
  • 建设银行网站支付流程变现流量推广app
  • 手机制作网站开发开鲁网站seo
  • wpf做的网站关于进一步优化当前疫情防控措施
  • 网站标签怎么做seo营销优化
  • 广东省网站建设公司排名深圳网络推广的公司
  • .net做网站之前设置百度上做优化
  • 品牌创意型网站建设最新黑帽seo培训
  • 丹灶网站建设重庆高端网站seo
  • 网站上传文章发稿吧
  • 男人和女人床上做性视频网站网站的优化
  • 注册城乡规划师考试郑州seo顾问外包公司
  • 网站不备案行吗竞价排名名词解释
  • 日本域名注册网站河南推广网站的公司
  • 网站后台密码存在哪seo专员岗位要求
  • wordpress crm网站如何优化排名
  • logo设计大赛网站如何免费找精准客户
  • 中英网站的设计网站建设的方法有哪些
  • 潍坊知名网站建设怎么收费搜狗seo
  • 对于给不良网站发律师函如何做百度快照提交入口