别院牧志知识库 别院牧志知识库
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 辨析

  • Sockets编程

  • Django

  • stackoverflow

  • Flask

  • 全栈之路

  • 面试

  • 代码片段

  • 异步编程

    • 序言
    • 平凡之路——asyncio 的演进
    • 同步/异步与阻塞/非阻塞的区别?
    • Python 线程同步机制:锁、RLocks、信号量、条件和队列
    • Python 对异步 I/O 的优化之路
    • 为什么要采用异步编程?
      • CPU 的时间观
      • 面临的问题
      • 解决方案
  • 😎Awesome资源

  • PEP

  • Python工匠系列

  • 高阶知识点

  • Python 学习资源待整理
  • 设计模式

  • 好“艹蛋”的 Python 呀!
  • FIFO | 待学清单📝
  • pip 安装及使用
  • 数据分析

  • 源码阅读计划

  • OOP

  • 关于 python 中的 setup.py
  • 并行分布式框架 Celery
  • 七种武器,让你的代码提高可维护性
  • 使用 pdb 调试 Python 代码
  • 每周一个 Python 标准库
  • 🐍Python
  • 异步编程
佚名
2020-11-03
目录

为什么要采用异步编程?

# CPU 的时间观

cpu_time

我们将一个 2.6GHz 的 CPU 拟人化,假设它执行一条命令的时间,它感觉上过了一秒钟。CPU 是计算机的处理核心,也是最宝贵的资源,如果有浪费 CPU 的运行时间,导致其利用率不足,那程序效率必然低下(因为实际上有资源可以使效率更高)。

如上图所示,在千兆网上传输 2KB 数据,CPU 感觉过了 14 个小时,如果是在 10M 的公网上呢?那效率会低百倍!如果在这么长的一段时间内,CPU 只是傻等结果而不能去干其他事情,是不是在浪费 CPU 的青春?

鲁迅说,浪费“CPU”的时间等于谋财害命。而凶手就是程序猿。

CPU 的时间观 - 简书 (opens new window)

# 面临的问题

  • 成本问题

如果一个程序不能有效利用一台计算机资源,那必然需要更多的计算机通过运行更多的程序实例来弥补需求缺口。例如我前不久主导重写的项目,使用 Python 异步编程,改版后由原来的 7 台服务器削减至 3 台,成本骤降 57%。一台 AWS m4.xlarge 型通用服务器按需付费实例一年价格约 1.2 万人民币。

  • 效率问题

如果不在乎钱的消耗,那也会在意效率问题。当服务器数量堆叠到一定规模后,如果不改进软件架构和实现,加机器是徒劳,而且运维成本会骤然增加。比如别人家的电商平台支持 6000 单/秒支付,而自家在下单量才支撑 2000 单/秒,在双十一这种活动的时候,钱送上门也赚不到。

  • C10k/C10M 挑战

C10k(concurrently handling 10k connections)是一个在 1999 年被提出来的技术挑战,如何在一颗 1GHz CPU,2G 内存,1gbps 网络环境下,让单台服务器同时为 1 万个客户端提供 FTP 服务。而到了 2010 年后,随着硬件技术的发展,这个问题被延伸为 C10M,即如何利用 8 核心 CPU,64G 内存,在 10gbps 的网络上保持 1000 万并发连接,或是每秒钟处理 100 万的连接。(两种类型的计算机资源在各自的时代都约为 1200 美元)

成本和效率问题是从企业经营角度讲,C10k/C10M 问题则是从技术角度出发挑战软硬件极限。C10k/C10M 问题得解,成本问题和效率问题迎刃而解。

# 解决方案

《约束理论与企业优化》中指出:“除了瓶颈之外,任何改进都是幻觉。”

CPU 告诉我们,它自己很快,而上下文切换慢、内存读数据慢、磁盘寻址与取数据慢、网络传输慢……总之,离开 CPU 后的一切,除了一级高速缓存,都很慢。我们观察计算机的组成可以知道,主要由运算器、控制器、存储器、输入设备、输出设备五部分组成。运算器和控制器主要集成在 CPU 中,除此之外全是 I/O,包括读写内存、读写磁盘、读写网卡全都是 I/O。I/O 成了最大的瓶颈。

异步程序可以提高效率,而最大的瓶颈在 I/O,业界诞生的解决方案没出意料:异步 I/O 吧,异步 I/O 吧,异步 I/O 吧吧!

编辑 (opens new window)
#异步
上次更新: 2024-07-23, 01:00:43
Python 对异步 I/O 的优化之路
Python 资源大全中文版

← Python 对异步 I/O 的优化之路 Python 资源大全中文版→

最近更新
01
2025 面试记录
05-28
02
提升沟通亲和力的实用策略
03-26
03
工作
07-15
更多文章>
Theme by Vdoing | Copyright © 2019-2025 IMOYAO | 别院牧志
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式