戳蓝字“码农的荒岛求生”关注我  

Google大神 Jeff Dean在之前的一次演讲中展示了这样一张表,非常有意思:

从这张图里我们可以清楚的看到,计算机系统中各种关键操作其典型耗时到底有多少(注意,各种不同的系统架构精确的数据可能与此不同,但数量级上差别应该不会很大)。

访存与cache

访问L2 cache的时延大概是访问L1 cache的10几倍左右,而访问一次内存的时延则高达访问L2 cache的20倍,是访问L1cache耗时的200倍

这一部分清楚的告诉每个程序员,编写出对cache友好的程序是至关重要的,尤其你的场景如果对性能要求很高则更是如此。

分支预测失败的惩罚大概只有5ns这个量级,博主在之前的文章《特斯拉遇上CPU:程序员的心思你别猜

分支预测

该功能主要针对 if 语句,由于现代CPU内部采用流水线方式来处理机器指令,因此在 if 对应的机器指令还没有执行完时后续指令就要进到流水线中,此时CPU就必须猜测到底 if 语句是否为真,如果CPU猜对了,那么流水线照常运行,但如果猜错了流水线中已经被执行的一部分指令就要作废。

很多同学看到这篇文章后表示if语句是不是尽量少用,从这张表可以看出,分支预测失败的惩罚不高,并且现代CPU的分支预测成功率很高,根本不必在意这点性能损失。

内存、SSD与磁盘

程序员都知道访问内存的速度比SSD块,访问SSD速度比磁盘快,那么到底能快多少呢?

同样顺序读取1MB数据,内存花费的时间为250,000 ns,SSD为1,000,000 ns,磁盘为20,000,000 ns。

我们可以看到,同样读取1MB数据,磁盘花费的时间是 SSD 的 20 倍,是内存的80倍

同样读取1MB数据,SSD耗时是内存的4倍。

这组数据告诉我们,相对内存来说磁盘真的很慢,如果你的经费充足就用SSD吧,如果你是土豪,那么就把数据库直接放到内存吧。

网络与磁盘

一般来说我们认为内存比磁盘快,磁盘比网络快,但这这张表告诉我们用1Gbps网络发送1K数据仅仅需要20,000 ns,而磁盘的一次寻道则高达10,000,000ns(10ms),网络IO可不一定比磁盘IO慢

当然,这也要看网络两端距离有多远。

网络

想测量数据包在网络两端来回一趟需要耗时多少?ping命令再简单方便不过了。

首先,博主在数据中心内部ping一台主机(注:ip地址用*来代替):

一圈下来耗时仅在100 us左右,速度非常快,在数据中心内部空间距离几乎可以忽略不计。

我的坐标在北京,接下来我们ping一下清华大学,哈哈,注意现在由于云服务商的存在,清华大学的官网服务器主机可不一定在清华大学里,为简单起见我们认为所ping的机器都在相应的地理位置上

这个耗时就很可观了,我们姑且用市中心到清华大学的直线距离评估一下数据包路径长度(实际数据包的路径肯定和这里不同),可以看到大概在10公里左右的数量级,用时将近10ms,不要觉得10ms很耗时,磁盘一次seek就是这个量级。

接下来出个省,ping一下浙大:

出了省就是不一样,北京与浙江的直线距离大概在1200公里,网络上走一圈耗时来到了将近15ms。

接着我们出趟国吧,去英国转一圈,ping下牛津大学:

出了国就更不一样了,北京与英国直线距离(球体表面)大概在7000公里,网络耗时将近50ms。

最后让我们去趟美国,ping下斯坦福大学:

和预想的差不多,北京与斯坦福直线距离大概在10000公里,耗时也在50ms左右。

从这组测试我们可以看出,网络的耗时和空间距离有很大关系,但在数据中心内部网络其实是非常快的,这一点在进行系统设计时需要意识到。

总结

系统设计一种工程实践,不是艺术遐想,每一个关键决策都要有依据而不能拍脑袋,本文的这张表就是你的依据(之一)。

希望这篇文章对大家理解系统时间有所帮助。

热门内容:
  • 程序员被辞 12 天,前领导要求回公司解释代码,结果懵了…

  • 来!一起搭建个永久运行的个人服务器吧!

  • MySQL 8.0 可以操作 JSON 了,牛逼。。。

  • 如何写出让同事无法维护的代码?

  • 抖音的服务器究竟有多大?

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

磁盘 IO 真的比网络 IO 快吗?相关推荐

  1. 实战:如何对磁盘和网络IO进行评估、监控、定位和优化?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 生产中经常遇到一 ...

  2. 详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)

    文章很长,但是很用心! 文章目录 1. 什么是I/O 2. 磁盘IO 3. 网络IO 4. IO中断与DMA 5. 零拷贝IO 6. BIO 7. NIO 8. IO多路复用 8.1 select 8 ...

  3. 内存与IO,磁盘IO,网络IO

    本节主要内容: 系统IO原理:Linux VFS  FD pagecache [java] 1文件系统的io 2内存和io关系 3网络io 任何程序都有 0:标准输入 1:标准输出 2:报错输出 /p ...

  4. Linux网络IO精华指南

    hi,大家好,今天文章相当硬核,成长就在每天点滴中,希望大家吸取文中的营养,加固自己,坚持下去,祝愿大家早日打通任督二脉. PS: 深入理解操作系统内核 恭喜上面获取的同学,请上面的同学尽快联系我!( ...

  5. ​网络 IO 演变发展过程和模型介绍

    作者:jaydenwen,腾讯 pcg 后台开发工程师 在互联网中提起网络,我们都会避免不了讨论高并发.百万连接.而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特 ...

  6. 网络 IO 演变过程

    作者:jaydenwen,腾讯 pcg 后台开发工程师 在互联网中提起网络,我们都会避免不了讨论高并发.百万连接.而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特 ...

  7. 从网络IO看高性能框架

    讨论一个高性能框架甚至语言的时候,我们在讨论什么? 三大网络模型阻塞IO+多进程阻塞IO+多线程非阻塞IO+IO多路复用 五种网络IO简介 网络IO的本质 如何区分阻塞IO和非阻塞IO 如何区分同步和 ...

  8. 网络IO演变发展过程和模型介绍

    本文来说下网络IO演变发展过程和模型介绍 文章目录 概述 网络IO的发展 网络 IO 的各个发展阶段 网络的两个阶段 阻塞IO和非阻塞IO的区别 同步IO和异步IO的区别 阻塞IO 阻塞IO的概念 阻 ...

  9. 高并发下的网络 IO 模型设计

    今天我们先聊一下高并发下的网络 IO 模型设计 高并发即我们所说的 C10K(一个server 服务 1w 个 client),C10M,写出高并发的程序相信是每个后端程序员的追求,高并发架构其实有一 ...

  10. 浅谈5种网络IO模型

    五种 IO 模型 1.阻塞式 IO 阻塞 IO 是最流行的 IO 模型 在网络 IO 的时候,进程发起 recvfrom 系统调用,然后进程就被阻塞了,什么也不干,直到数据准备好,并且将数据从内核复制 ...

最新文章

  1. opencv图像旋转
  2. dts插件 foobar pan baidu_SU插件插件库安装教程
  3. jQuery里面的addClass讲解
  4. python 数据分析基础 day1-初窥内容
  5. [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
  6. kafka通过脚本一次启动集群
  7. PHP重建索引数组的键值
  8. 爬虫工具和服务——Python之外的选择
  9. linux 文本排序、合并和分割 -转
  10. OpenCV3.4.2+VS2015开发环境搭建
  11. HTML5重要知识点整理
  12. php绕过验证码注册,验证码被绕过的处理方法_PHP教程
  13. Ext2.2 combo 多选效果
  14. android手机如何隐藏应用程序,三星手机怎么隐藏图标/软件 三星隐藏应用程序设置方法...
  15. 中国前10名的休闲服品牌企业信息化漫谈--S公司
  16. Go简明语法汇总--入门
  17. 英语 —语法— 句子成分
  18. mysql mybatis 不等于号写法
  19. android社交源码,原生仿微信社交社区即时通讯聊天双端APP源码开源 带PC客户端...
  20. 信号与系统sa函数求积分_信号与系统

热门文章

  1. Word替换重复的内容
  2. 浅谈CAPM和因子模型
  3. unixbench跑服务器性能,UnixBench 5.1.3性能测试_IntelCPU_服务器评测与技术-中关村在线...
  4. Neural Controlled Differential Equations forIrregular Time Series(NIPS2020)
  5. 最好的java代码编辑器_推荐 5 款牛逼的代码编辑器
  6. 千呼万唤始出来 Google GDrive将于4月初正式推出
  7. 分布式GNN系统环境配置
  8. supersu_如何使用SuperSU和TWRP扎根Android手机
  9. 1308:【例1.5】高精除
  10. 程序员老了之后练太极最合适了