前言:

本文为小白向简单科普系列,旨在用尽量简单(土味)的方式介绍一下内存双通道的工作原理以及其作用。如果有写错或写的不好的地方欢迎各位指正。

一、内存双通道的原理

我们都知道CPU是用来处理数据的,但数据从何而来?所有数据从硬盘来,但是由于硬盘传输速度和CPU数据读取速度差的太多,所以就有了内存,充当CPU和硬盘之间的数据传输的桥梁(其实内存速度和CPU的传输速度也差的远,同理就有了CPU里的L3、L2、L1缓存)。

由上面的介绍我们可以知道,数据是从硬盘到内存再到CPU内的。内存为单通道时候数据怎么传输的呢?这里拿一个数组展示,1、2、3、4、5、6、7、8这8个数字按照从小到大的顺序组成数组12345678。假设CPU从内存读取一个数字要1ns,在单通道的情况下,CPU每次只能从内存中读取一个数字,那么读取完这个数组要8ns。

那么有什么办法提高这个数组的读取速度呢?

这里就要引入双通道这个概念了,这里就不扯百度百科上的东西了,用一些直白方式解释下。我们将12345678这个数组拆分为两个部分,一个是1357,一个是2468,分别装入两个内存。然后CPU再去读取内存中的数据,由于内存为双通道,CPU可以同时访问两条内存。虽然还是只能从每条内存读取一个数字,但是这时一次可以读两个数据,1、2一组,3、4一组,5、6一组,7、8一组,这样CPU读取整个数组只需要4ns了。

当然理想很丰满,现实很骨感,事实上双通道内存绝对达不到这种数据读取时间直接缩短一半的情况。这是为什么呢?我们没办法保证CPU读到的数据仍然是12345678这个原始数组,因为CPU对两条内存的读取完全是随机的,有可能出现CPU读到的数组为21345678、21435678,12345687等等。如果CPU拿到的不是12345678这个固定顺序的数组,拿到其他排列顺序的数组都是无效的数据。这里需要设计一个数据校验算法,解决这个问题,确保拿到的数据一定是正确的(这里就不展开讨论了,毕竟是简单科普)。由于还要执行数据校验,产生了额外的时间开销,所以双通道达不到理论性能。

于是就有了这种情况——原理上双通道内存性能可以直接翻倍,但是要保证数据的准确性又产生了其他的开销,所以实际达不到理论的性能。双通道带来的性能增长是实打实的,但由于使用CPU和软件的不同,具体问题需要具体分析,这里无法直接给出数据到底能提升多少。

到这里原理其实已经讲完了,但是我想再延伸一下,不知道各位听没听说过硬盘组raid0阵列。其实和双通道内存原理类似,问题也类似。将12345678这个数组拆分保存到两块硬盘上,读取的时候分别从两块硬盘同时读取,加上为了保证传输数据正确性的开销,虽然读取时间不能缩短一半,但也会有所缩短。但是raid0有个致命缺陷,那就是一份数据拆分成两部分保存在两块硬盘上,一旦其中一块硬盘出问题了,你的全部数据就都没了。毕竟你只有正常的那块硬盘上的1357或者2468,只有一半的数据是没办法拼出一个完整的12345678数组的(还有更进一步的raid1、2、3……,有针对这种情况的解决办法,有兴趣请自行了解,不过要求的开销太大了,一般人不建议接触raid),想通过数据找回也是不现实的。

二、一些常见的疑点解答

两条内存可以组成双通道,那我整三、四条内存组个三通道、四通道岂不美哉,虽然达不到性能3,4倍这种提升,但是有提升也是好的。同样是理想很丰满,现实很骨感。目前主流CPU就只支持到双通道内存,在这些CPU上无论有几条内存都只能双通道。

AMD这边民用级只有线程撕裂者系列才支持4通道内存,英特尔这边民用级只有X系列才支持4通道内存。

那插3、4内存有没有提升呢?这个是有的,大概举个例子,如果单通道内存有80分,那双通内存有100分,三、四根内存条大概有102分、104分这样子。

单通道到双通道提升巨大,而三、四根内存则是靠内存条多堆出来的大带宽来提升一点点分数。而内存也是存在水桶效应的,多根内存条中,为了系统能达到更好的稳定性,全部的内存条运行频率都会被拉低到最差的那一根上。多根内存条也拉低了系统的稳定性,只要有一条内存出问题就无法开机,同时蓝屏几率也会增加。所以除非有支持4通道内存的CPU或者特别需要超大内存容量的用户,还是建议一般用户只插两根内存条,减少内存出错的几率。

三、组双通道的要求

如果是加装内存,建议尽量买和原品牌一样(内存容量,频率以及时序都一样的)的内存条。如果是替换的话,直接买两根一套的内存条,这样连内存颗粒都可以保证一样。这样就可以保证稳定性和兼容性更好,毕竟谁也不想用着用着电脑直接蓝屏。

目前(2020年6月),双通道最好是双8g组成16g,或者双16g组成32g,或者更大容量的双通道。而双4g组8g这种,就有些力不从心了,软件和系统都越来越吃内存,8g多多少少不太够用了。对于笔记本来说,如果内存为板载且不可后续加装建议直接16G起步,如果还有空的内存插槽可以后续加装,一时囊中羞涩可以选择8G,后面8G不够用了或者等有钱了再加装8G,或者加更大容量的也可以,有钱直接选择16G或者更大的内存。

总结

从单通道到双通道提升巨大,而三或四根内存条这种奇怪的搭配,带来的性能提升非常小,而将蓝屏和不开机的几率拉大了,这种搭配不值得各位看官选择。

getmenuiteminfo无法读取内存_简单科普系列—内存为什么需要组双通道原理及其作用...相关推荐

  1. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  2. 查看程序占用内存_电脑扩展了内存 但还总是提示内存不足?

    今天英特尔中国解答了一个大家可能遇到的电脑内存问题,电脑扩展了内存但还总提示内存不足?这是怎么回事呢? 英特尔表示,这很可能是某个程序的代码错误导致电脑内存溢出,之前被占用的内存无法释放.用户可以进入 ...

  3. Linux性能学习(2.3):内存_为什么分配的内存比申请的内存大16个字节

    文章目录 1 验证申请不同内存,系统分配机制 1.1 代码 1.2 测试 1.3 结论 2 为什么会多分配内存 3 为什么会有4字节不可使用 参考资料: https://www.gnu.org/sof ...

  4. 32位java 最大内存_【答疑系列】为什么32位系统只支持最大4G内存?

    这个问题一直都有同学问到,算是提问次数最多的问题之一了. 32位是什么 现在主流的操作系统都是64位的,早期存在32位操作系统,相信大家也都有所听闻,其实,在更早之前,还有16位.8位的,这里就不展开 ...

  5. java 内存和实际内存_请问更改eclipse内存和更改jvm内存是一会事儿吗?

    RSS列 表示, 程序占用了多少物理内存. 虚拟内存可以不用考虑,它并不占用实际物理内存. (2). top 命令也可以 其中VIRT(或VSS)列 表示,程序占用了多少虚拟内存. 同 ps aux ...

  6. jvm分配内存_为JVM分配内存:一个案例研究

    jvm分配内存 这篇文章是关于最近的性能调整练习的. 与往常一样,这些开始于关于症状的模糊表述. 这次,魔鬼采取了"应用程序速度慢,我们无权访问源代码的形式. 我们有什么选择来改善局势&qu ...

  7. python 内存_一行Python解决内存问题

    原标题:一行Python解决内存问题 内存不足是项目开发过程中经常碰到的问题,我和我的团队在之前的一个项目中也遇到了这个问题,我们的项目需要存储和处理一个相当大的动态列表,测试人员经常向我抱怨内存不足 ...

  8. 苹果怎么付费购买内存_对于苹果手机加内存你怎么看?

    现在世面上更换内存的方式有两种,一种叫刷2码,把存储器的序列号和IMEI码匹配,就能通过激活验证.这种方式有一个弊端,是苹果iCloud的功能无法完全使用,最直接的影响是无法使用"查找我的i ...

  9. dblink 造成 oracle 服务器 内存_性能故障之内存抖动的诊断过程

    下面的分享是笔者在2月份处理的一起性能故障,笔者将分析过程分享出来,给大家起到抛砖引玉的作用. 接到XXX项目组报障:XX系统Connecttodatabasetimeout,请求协助检查数据库是否有 ...

  10. openjdk platform binary 内存_记一次内存溢出导致的生产事故

    背景 因为同事的离职,半路被迫接手的一个可视化项目,使用ElasticSearch作为OLAP数据库.Docker作为部署工具等,突然有一天项目现场环境出现JVM内存溢出问题,被迫披挂上阵定位问题的原 ...

最新文章

  1. NR 5G 安全要求和功能
  2. MVC、MVP、MVVM,我到底该怎么选?
  3. C语言基础-简单程序分析
  4. MyBatis查询结果resultType返回值类型详细介绍
  5. 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
  6. VS Code 摸鱼插件开发小记
  7. python standardscaler_教你用python一步步解决“维度灾难”
  8. Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
  9. 静态 动态 强类型 弱类型语言的区别
  10. 监听关闭页面事件 ajax,Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
  11. DEV C++下载,百度云盘,干净
  12. 出售计算机广告英文作文,17年6月大学英语四级作文参考范文—二手电脑广告
  13. Moving to Linux: Kiss the Blue Screen of Death Goodbye!读书笔记1
  14. osi模型:七层模型介绍_什么是OSI(开放系统互连)模型?
  15. PHP开发环境搭建和phpinfo函数
  16. LeetCode刷题框架总结
  17. 韩国美女黑客是怎样的一种存在?
  18. Scrapy Python爬虫实战:抓取知乎问题下所有回答!
  19. Creo草绘图形技巧-透视图
  20. 【人工智能】人工智能行业研究:史上最伟大的科技革命

热门文章

  1. (转)什么是DevOps?阿里专家为你来解读
  2. 机器学习落地的五个阶段
  3. 【语音判别】基于matlab双门限法判别语音信号【含Matlab源码 1720期】
  4. 【优化算法】符号LMS算法【含Matlab源码 697期】
  5. 【水果蔬菜识别】基于matlab GUI灰度+二值化+腐蚀+直方图处理水果蔬菜识别【含Matlab源码 1052期】
  6. python网络开发框架_宿迁python网站开发框架收费
  7. ai人工智能操控什么意思_为什么要建立AI分散式自治组织(AI DAO)
  8. python:将数据写入csv文件
  9. mysql 向量写法_mysql – 你如何在Ruby中处理一个非常大的向量?
  10. python运算符解释_Python运算符的详细介绍