介绍

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. 解决Manjaro linux的中文输入

    系统安装完成后, 首先:安装中文输入法:pacman -S fcitx fcitx-libpinyin kcm-fcitx 接着:修改.xprofile 添加内容如下: export GTK2_RC_ ...

  2. python的上下文管理

    说道上下文管理首先想到的就是这个: class MyResource: def __enter__(self): print("查询开始") return self def __e ...

  3. Spring Boot学习——Controller的使用

    本文主要记录几个注释的使用方法. 1. @Controller : 处理http请求 2. @RequestMapping : 配置URL映射 3. @RestController : 组合注解,sp ...

  4. C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法

    Image.FromFile 一旦使用后,对应的文件在一直调用其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等 ...

  5. hdu 4524(模拟)

    郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  6. POJ3086 Treats for the Cows(区间DP)

    题目链接  Treats for the Cows 直接区间DP就好了,用记忆化搜索是很方便的. #include <cstdio> #include <cstring> #i ...

  7. GROOVY入门

    refer to 精通Groovy(IBM)https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html re ...

  8. Topcoder SRM 664 DIV 1

    BearPlays 快速幂 题意: 给你两个数A,B,有种操作是将大的数减去小的数,并将小的数乘以2.反复k次,问你最后的小的数回是多少. 题解: 由于整个过程$A+B$的值是不会改变的.现在令$S= ...

  9. An error occurred uploading to the iTunes Store - Please upgrade Java

    Yesterday there were an update to Jave (1.6.0_31) in the "Software update", but now when I ...

  10. Picasso,Glide,Fresco那个好?

    前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuer ...