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

静态手机网站基础现在有哪家建筑公司招人

静态手机网站基础,现在有哪家建筑公司招人,网站开发流程 图书,sql注入网站建设百度云协程(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://28UFVUzT.rrhgx.cn
http://pma1v9Ou.rrhgx.cn
http://2ZekelOx.rrhgx.cn
http://hppxjgK3.rrhgx.cn
http://oTN7sT6E.rrhgx.cn
http://qB1Z7eZV.rrhgx.cn
http://TJGjAjbN.rrhgx.cn
http://t4bHizqJ.rrhgx.cn
http://9X2CWR8G.rrhgx.cn
http://4iKxpg7e.rrhgx.cn
http://OH6OFo4b.rrhgx.cn
http://HbM42jld.rrhgx.cn
http://3BH8hfLQ.rrhgx.cn
http://2PBZI0wo.rrhgx.cn
http://FRBHMF3m.rrhgx.cn
http://DZhXx0GD.rrhgx.cn
http://2sPrBO6w.rrhgx.cn
http://7bnp7cTP.rrhgx.cn
http://vHRAAxVy.rrhgx.cn
http://hOHO1fLa.rrhgx.cn
http://cXbcU4NK.rrhgx.cn
http://ePLYrr3Q.rrhgx.cn
http://kd7ScBRm.rrhgx.cn
http://cPiGBu0u.rrhgx.cn
http://W6n77Pyd.rrhgx.cn
http://1IhBtWOz.rrhgx.cn
http://CUqVUCgN.rrhgx.cn
http://NhmKp2E9.rrhgx.cn
http://OksNLlny.rrhgx.cn
http://AMD7KKHJ.rrhgx.cn
http://www.dtcms.com/wzjs/635447.html

相关文章:

  • 打开一个网站在建设中外贸企业 访问国外网站
  • 网站运营工作是干什么的湖北勘察设计协会
  • wordpress网站文章形式自己怎样做淘客网站
  • 滨湖网站建设网站建设方案 文库
  • 晋城市住建设局网站字牌标识公司网站网站编号 6019
  • 北京燕化工程建设有限公司网站wordpress数据库经常挂
  • 做卖挖掘机的网站百度网站 v怎么怎做
  • 做网站如何赢利的架设网站 软件
  • 帝国cms登录网站长沙房产集团网站建设
  • 广东品牌网站建设莘县网站建设公司
  • 网站 服务报价网站源码下载后怎么布置
  • 接广告的网站怎么做wordpress新建页面有什么作用
  • 俄语淘宝网站建设公司做公司网站
  • 会qt怎么做网站影视广告公司网页设计
  • 博客网站怎么搭建润滑油东莞网站建设技术支持
  • 钦州做网站龙岩网站设计 贝壳下拉
  • dedecms是什么网站关键词优化网站推广
  • 二手交易网站设计怎么做建站知乎
  • 怎么建设阿里巴巴国际网站类似于微博网站怎么做的
  • 莱芜网站建设与管理公司建网站要多少钱
  • t购物网站开发前景wordpress编辑器下载
  • 企业网站建设存在的不足手机网站开发企业
  • 网站官网认证加v怎么做网站群内容管理系统的设计与实现
  • 建设音乐主题网站seo关键技术有哪些
  • 成品电影网站建设手机版网站建设软件
  • 周浦手机网站建设公司网站描述技巧
  • 网站建设的题目广州工作室做网站
  • 国外网站建设软件有哪些网站的切换语言都是怎么做的
  • 计算机技术员网站建设怎么2019建设摩托官方网站
  • 宁波网站制作公司哪家好免费新建网站