介绍

Asyncio试图解决什么问题?

对于IO负载,有且仅有两个理由使用基于asyncio的并发而不是基于多线程的并发:
1. Asyncio为抢占式多任务(线程)提供了一个更安全的替代方案,避免了某些程序中的bugs、竞态条件和其它未知风险;
2. Asyncio提供了一种简单的方法来同时支持成千上万个socket连接,包括长连接或处理物联网应用程序的MQTT(消息队列遥测传输)。


对于Asyncio有几个误区:
1. “Asyncio会使你编写的程序运行地非常快”,事实是多线程比协程跑的快一点,协程可以同时运行很多socket连接,操作系统往往限制了线程的数量,虽然可以通过修改配置来支持更多的线程,但不如协程简单;
2. “Asyncio使多线程变得多余”,完全错误,asyncio不受GIL的影响仅仅是因为GIL影响多线程程序,其阻止了多核并发,而asyncio从定义上就是单线程的,不受GIL影响,但是也不能从多核CPU中受益;
3. “Asyncio避免了所有的竞态条件”,错误,竞态条件的可能性存在于任何并发编程中,不管是线程还是基于事件的编程。Asyncio可以消除常见的竞态条件(如线程间共享内存访问),但并没有消除其它类型的竞态条件(如分布式微服务体系结构中共享资源的进程间竞争),与多线程相比优势在于因为await关键字的存在,更容易推断如何访问共享资源;
4. “Asyncio使并发编程更容易”,错误,处理并发总是复杂的,asyncio只是使得避免某些恶心的bug容易一点。


即使有Asyncio,仍然有很多复杂问题没有解决。你的程序如何支持健康检查?如何在大量的C/S连接时,仅需要很少的数据库socket来维持?程序如何安全关闭?如何处理硬盘访问和日志记录?


Asyncio给你解决这些复杂问题提供了一种单线程的解决方法,可能会使编程容易一点。

深入Asyncio(一)入门介绍的更多相关文章

  1. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  2. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  3. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  4. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  5. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

  6. JavaScript入门介绍(一)

    JavaScript入门介绍 [经常使用的调试工具][w3school.com.cn在线编辑] [Chrome浏览器 开发调试工具]按F121.代码后台输出调试:console.log("t ...

  7. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:  1. 并行编程和多线程编程的区别.  ...

  8. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  9. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

  10. mybatis入门介绍一

    首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...

随机推荐

  1. AVRStudio 6 设置F_CPU时钟频率

    具体如下: 1>右键项目属性 2>根据语言选择一下,C或C++

  2. [LeetCode] Unique Binary Search Trees II dfs 深度搜索

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  3. check source code after macro expand

    Some time I'd like check source code after macro expand. We can use -E option to stop after the prep ...

  4. 通过Java实现斗地主

    功能:洗牌,发牌,对玩家手中的牌排序,看牌 package demo06; import java.util.ArrayList; import java.util.Collections; impo ...

  5. python对象的复制问题

    list 的拷贝问题: 1, >>> a [1, 2] >>> b=a[:] >>> b [1, 2] >>> b[0]=20 ...

  6. 配置之MySQL5Dialect

    报错: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.en ...

  7. Django性能调优

    1.针对数据库的调优 程序对数据库的多次访问,会影响速度. 一般的流程是建立连接,获取或者修改数据,关闭连接.如果多次请求,导致多次建立连接会影响到速度. 解决办法有:1.延长连接时间并执行多次操作 ...

  8. 实现一个Java五子棋

    五子棋手把手教你写: 写在前面的话: 回想起从前初学代码的五子棋简直写的不像样子.今天闲来无事就写了个五子棋的小程序. 一来呢回忆一下很久以前写代码时的感觉. 二来呢顺便帮下诸位有需求的学生,顺利的C ...

  9. 这算是CSS的bug吗?

    移动端web开发越来越火,同时移动端适配也是一个很让人头疼的事情,你不能让一个同样大小的元素在不同的设备上都显示一样大小.(iphone6和iphone4下大小肯定是应该不一样的,否则用户体验很差) ...

  10. ios界面笔记(二)

    1,在ios下实现checkbox的效果 主要思路是添加一个button,然后读取其isselected属性,分别添加不同的界面图片即可 具体实现如下: 2,解决两个window切换时消息无法送达 主 ...