介绍

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. hdu 2147 kiki's game 组合游戏 找规律

    题目链接 题意 两人轮流将硬币从\((n,m)\)移动到\((1,1)\),每次只能向下或向左或向左下移动一格,最后无法移动者输.问先手会赢还是会输. 思路 找规律 -- P N P N P N P ...

  2. 模块(python的标准库)

    在python中叫做模块,其他语言中叫做类库.python中的模块有三种:内置模块,第三方模块,自定义模块. 模块的使用: 先导入,import+模块名,再使用,模块名+函数名() .py文件与.py ...

  3. hdu 5475(打破固定思维OR线段树)

    An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  4. fprintf与fscanf

    #include <stdio.h> int main() { //printf("Please input the value a:\n"); 等于下一句 fprin ...

  5. List集合使用注意的问题

    在做自动保存草稿的功能遇到集合数据的问题,先贴自动保存草稿的代码 /** * 每5 秒保存一次草稿 */private void startDraftTimerTask(){ if (draftTim ...

  6. win10下安装redis

    Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...

  7. 牛客网 牛客小白月赛1 J.おみやげをまらいました

    J.おみやげをまらいました   链接:https://www.nowcoder.com/acm/contest/85/J来源:牛客网     随便写写.   代码: 1 #include<ios ...

  8. 初探Java类型擦除

    本篇博客主要介绍了Java类型擦除的定义,详细的介绍了类型擦除在Java中所出现的场景. 1. 什么是类型擦除 为了让你们快速的对类型擦除有一个印象,首先举一个很简单也很经典的例子. // 指定泛型为 ...

  9. Splitting Pile --AtCoder

    题目描述 Snuke and Raccoon have a heap of N cards. The i-th card from the top has the integer ai written ...

  10. 盘点支持Orchard的.NET 4.5虚拟主机(虚拟空间)

    Orchard作为.NET社区最为先进的开源项目之一,已经被越来越多的人使用, 由于它使用了最时髦的微软技术栈(.NET4.5),因此在 Win2008+和IIS7+ 的环境上运行最为完美, 而win ...