当前位置: 首页 > 编程日记 > 正文

异步IO一定更好吗?

http://cnodejs.org/blog/?p=1015

续:异步IO一定更好吗?

我之前的一篇文章《异步IO一定更好吗?》中举了一个很变态的例子,用以说明在单碟机械式硬盘上异步IO反而可能降低性能的问题,大家的讨论很热烈。前天的NodeParty杭州站分享会上,来自上海的@老赵 随口带出了这个问题,大概说是多个异步IO请求会使得性能提高,因为磁头走到哪里就处理到哪里,很多请求在“路上”就可以被处理掉了。

乍一看,我和老赵的结论是相反的。所以从nodeparty回来后查了查资料,并且做了一些实验,发现这两种情况在各自特定的场景里都可能是正确的,在别的场景又都可能是错误的。为什么呢?

我之前的结论没有认真考虑操作系统对IO调度的优化,对此一知半解就拿出来大放厥词,实在不应该!

Linux2.6内核对IO调度提供了四种算法:Completely Fair Queuing(CFQ)、Deadline、NOOP和Anticipatory(as),详细情况请点击这里阅读。在2.6内核中,系统默认的IO调度算法是CFQ,也就是OS会对请求的偏移量首先进行排序,按照这个排序顺序进行磁头的移动和请求响应,这正是老赵的观点的出处。而假如某个磁盘采用了NOOP的IO调度算法,也就是说内核不会对IO调度做任何优化,容易理解,正是我在《异步IO一定更好吗?》一问中的观点。除此之外,用户还可以为不同磁盘指定不同的IO调度算法。查看某个磁盘的IO调度算法的命令如下:

$[pengchun]$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

原文这里的测试方法不对,已删掉

总结我的几点经验:

1. 异步IO不一定是性能最好的;

2. 操作系统对磁盘IO的各种调度算法中,没有哪一个是绝对更好的;随着应用场景的不同,很可能某一个算法的性能远远好于其他几个;而在另外的场景中则相反。例如,某个磁盘专门用来写日志的,那么你用NOOP就最好了;而如果要作为数据库的磁盘来使用,deadline可能是最好的算法了;

3. 尽管操作系统会做这样那样的优化,但不要懒惰地依赖操作系统;对机械式磁盘的访问,尽可能把随机访问变成顺序访问。

Related posts:

  1. 异步IO一定更好吗?

相关文章:

谈谈Python那些不为人知的冷知识(二)

本文转载自Python的编程时光(ID:Python-Time)小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来。从上一篇的分享来看,仍然有不少 Pythoner 对这些冷知识存在盲区,所以今天迎来第二篇。如果上篇你…

前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画

效果预览 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。 请用 chrome, safari, edge 打开观看。…

【数据库】SQLite和MySQL之间的对比和选择

目录1、各自特定2、使用场景3、选择哪个1、各自特定 SQLite :独立、简单(零配置);适用于为单个应用程序和设备提供本地数据存储。 MySQL:可伸缩、高并发性;适用于客户端/服务器模式企业数据的共享数据存储…

MySql中管理百万级要注意些什么东西(转载)

一、我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应 用编程接口(API) 应用程序 二、优化硬件 如果你需要庞大的数据库表 (>2G),你应该考虑使用64位的硬件结构,像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用…

【数据库】sqlite3数据库备份、导出方法汇总

【数据库】sqlite3常用命令及SQL语句 目录1、直接拷贝数据库2、使用.backup .clone1)交互式2)脚本3、导出到csv文件中(其它格式类似)1)交互式2)脚本3)导出成其它格式汇总a> .mode asciib>…

高通与苹果宣布“复合”,英特尔黯然退场 | 极客头条

作者 | 郭芮转载自公众号CSDN(ID:CSDNnews)为期两年的苹果高通“诉讼之争”经历了各种推波助澜愈演愈烈,俨然到了最为关键的白热化阶段,没成想,在刚刚正式进入美国司法庭审环节的两天后却被强势叫停了!4 月…

MQTT 协议 Client ID 长度不能超过23个字符

今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器。 经过查看协议发现:客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识。它必须在搜有客户端连接到…

【数据库】适用于SQLite的SQL语句(一)

目录一、统计函数二、表TABLE1、创建表CREATE TABLE2、更改表ALTER TABLE3、删除表DROP TABLE三、分析表ANALYZE四、附加数据库 ATTACH DATABASE五、事务六、核心函数七、索引INDEX1、创建索引:CREATE INDEX2、查看索引:3、使用索引 INDEXED BY4、删除索…

谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条

作者 | Heidi Howard编译 | 刘静本文转载自公众号图灵TOPIA(ID:turingtopia)本文作者Heidi Howard,是剑桥大学计算机科学与技术系系统研究小组的分布式系统研究员。Heidi的研究领域一直围绕分布式系统中的一致性,容错性和性能并且…

使用Nginx做前端服务器时让Apache得到真实IP的方法

一:nginx.conf proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 其实这个proxy.conf里面默认都有,在nginx.conf使用include proxy.conf就可以 二:apa…

Hadoop生态圈-hive五种数据格式比较

Hadoop生态圈-hive五种数据格式比较 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。

华为巨资收购为云计算趟平道路?

华为巨资收购为云计算趟平道路&#xff1f;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />文 小刀马众所周知&#xff0c;华为在全球的技术能力和市场地位也是有目共睹的&#xff0c;这是华为多少年兢兢业业守成的一种回报。更…

【数据库】适用于SQLite的SQL语句(二)

目录九、视图VIEW1、创建视图2、删除视图十、虚拟表1、创建虚拟表2、删除虚拟表十一、时间和日期的函数十二、分析和故障排除十三、SQL语句中的表达式1、运算符2、字面值3、参数十四、插入 INSERT十五、SQLite关键字十六、解决冲突 ON CONFLICT九、视图VIEW 视图是基于真实数据…

从对ML一窍不通到斩获AT等special offer,拿下大厂算法岗就靠它了

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年春招就要过去&#xff0c;秋招也就不远了。对于很多计算机专业的毕业生来说&#xff0c;大部分都还处于迷茫期&#xff0c;由于大学时的大部分时间都可能在划水&#xff0c;导致不知道现在如何准备就…

WWDC2018总结

本人的第一篇文章&#xff08;现在写文章是为了提升自己的语句表达能力&#xff09; 欢迎大家观看本文章&#xff0c;是略微总结一下WWDC2018发布的iOS12的新东西 iOS12略微总结&#xff08;持续更新。。。&#xff09; iOS12 变化 iOS 12新功能汇总&#xff08;后面希望可以上…

make报错:/usr/bin/ld: cannot find -lXXX

在编译php时报错如下&#xff1a; # make 。。。 /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Error 1 问题原因&#xff1a; 该问题一般是由于ld在进行库的连接时找不到库文件所致&#xff1a; 解决方案&#xff1a; 出现该…

for死循环、怪异字符串、两次return……Python冷知识(三)

本文转载自Python编程时光&#xff08;ID:Python-Time&#xff09;冷知识系列&#xff0c;已经更新至第三篇。前两篇传送门小明给你准备好了&#xff0c;还没阅读的可以学习一下。谈谈 Python 那些不为人知的冷知识&#xff08;一&#xff09;谈谈 Python 那些不为人知的冷知识…

snmpd 子代理模式编译测试

1、参考链接 1&#xff09;Net-snmp添加子代理示例https://blog.csdn.net/eyf0917/article/details/395466512、操作步骤1&#xff09;网络拷贝下面的文件http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mib_module/NET-SNMP-TUTORIAL-MIB.txthttp://www.net-snmp.org/t…

【数据库】适用于SQLite的SQL语句(三)

目录十七、重新引索REINDEX十八、查询SELECT1、简单查询2、复合查询十九、更新UPDATE二十、公用表表达式&#xff08;CTE&#xff09;WITH1、普通表达式2、递归表达式二十三、VACUUM二十四、UPSERT十七、重新引索REINDEX REINDEX命令用于从头开始删除和重新创建索引。 十八、…

算法系列15天速成——第二天 七大经典排序【中】

首先感谢朋友们对第一篇文章的鼎力支持&#xff0c;感动中....... 今天说的是选择排序&#xff0c;包括“直接选择排序”和“堆排序”。 话说上次“冒泡排序”被快排虐了&#xff0c;而且“快排”赢得了内库的重用&#xff0c;众兄弟自然眼红&#xff0c;非要找快排一比高下。…

如何构建优质的推荐系统服务?| 技术头条

作者丨gongyouliu来源 | 大数据与人工智能&#xff08;ID:ai-big-data&#xff09;任何一个优质的软件服务都必须考虑高性能、高可用(HighAvailability)、可伸缩、可拓展、安全性等5大核心要素&#xff0c;推荐系统也不例外。所以&#xff0c;我们会围绕这5个点来说明&#xff…

DispatcherServlet之HandlerAdapter的handle

2019独角兽企业重金招聘Python工程师标准>>> 注&#xff1a;SpringFramework的版本是4.3.x。 1.DispatcherServlet的doService方法时序图 图1 DispatcherServlet的doService方法时序图 2.AnnotationMethodHandlerAdapter的handle方法时序图 图2的原图在Gith…

【C++】C++11 STL算法(九):番外篇

1、如果获取指针或迭代器指向的类型 详见&#xff1a;C 11&#xff1a;如何获取一个指针或迭代器指向的类型&#xff1f; decltype(*std::declval<Pointer>())decltype&#xff1a;c11关键字&#xff0c;类型推导。详见&#xff1a;【C】C11新增关键字详解 std::declva…

IBM Tivoli Netview在企业网络管理中的实践(附视频)

今天我为大家介绍的一款高端网管软件名叫IBM Tivoli NetView&#xff0c;他主要关注是IBM整理解决方案的用户&#xff0c;分为Unix平台和Windwos平台两种&#xff0c;这里视频演示的是基于Windows 2003 server下的IBM Tivoli NetView 6.1在企业中的部署应用&#xff0c;可以为大…

【C++】C++11 STL算法(十):使用STL实现排序算法

一、快速排序 1、适用于c11版本 template <class ForwardIt> void quicksort(ForwardIt first, ForwardIt last) {if(first last) return;auto pivot *std::next(first, std::distance(first,last)/2);ForwardIt middle1 std::partition(first, last, [pivot](con…

“你行你上”:有本事跟OpenAI Five打一把DOTA?| 极客头条

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;你们不是嫌弃世界冠军 OG 团队实力太水吗&#xff1f;“你行你上”的机会来了。4 月 14 日凌晨&#xff0c;OpenAI Five 以 2:0 击败了 DOTA 世界冠军团队 OG 引发热议。比赛当天&#xff0c;OpenAI 也宣布…

Java学习笔记二十五:Java面向对象的三大特性之多态

Java面向对象的三大特性之多态 一&#xff1a;什么是多态&#xff1b; 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口&#xff0c;使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现。 现实中&#xff0c;比如我们按下 F1 键这个动作&am…

省钱之道--图解域域树域林根域的含义

省钱之道--图解域域树域林根域的含义 标签&#xff1a;域 域林 图解域域树域林根域的含义 域树 根域原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://angerfire.blog.51cto.com/198455/1…

AI算法在FPGA芯片上还有这种操作?| 技术头条

作者 | 杨付收出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;碾压与崛起AI算法的崛起并非一帆风顺的&#xff0c;现在的主流的NN类的卷积神经网络已经是第二波浪潮了&#xff0c;早在上个世纪80年代&#xff0c;源于仿生学&#xff0c;后又发展于概率学的早期AI算…

[Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型

自定义type 根据官方文档&#xff0c;新建TinyIntType类&#xff0c;集成Type&#xff0c;并重写getName&#xff0c;getSqlDeclaration&#xff0c;convertToPHPValue&#xff0c;getBindingType等方法。 TinyIntType.php完整代码&#xff1a; <?php namespace db\types; …