它最大的特点,就是体积小,不用插电源线,还支持更快的速度,这样的固态硬盘谁不喜欢呢?但这玩意买起来和电脑里的其他硬件还不太一样。别的硬件的都是一个萝卜一个坑,你要是买一张 3080 ,卖家基本上不敢给你发一张 3060 。M.2 难挑,很大程度上就是因为在这块小小的盘上就有三个主要部件。它们分别是:承担控制功能的主控板、充当硬盘操作系统的固件,还有用于储存的颗粒。这三个主要部件规格很多,挑起来很麻烦。但与此同时,他们对于硬盘的性能也有很大的影响。
当同一层货架上的快递越少,我们找快递就越快。而且因为每天取放快递的次数少,快递架的寿命也就更长。坏处就是如果一层货架上快递少了,快递站的运营成本也变高了。所以对应来说,无论是读取速度,颗粒寿命,排行都是 SLC > MLC > TLC > QLC 。价格从贵到便宜也是 SLC>MLC>TLC>QLC。东芝同样大小的 SLC 和 MLC 颗粒。价格正好是 5 倍 ▼
当然,厂商们有时候也会在颗粒的命名上做手脚。上次托尼在买硬盘的时候,就看到了一个 3Bits MLC 。
实际上这玩意就是个 TLC 颗粒。遇到类似的这种情况,我们只需要记住:1Bit = SLC、2Bit = MLC、3Bit =TLC、4Bit =
QLC命名上带有“ bit ”的,别管这玩意是啥 LC ,一律按照上面的这个规则处理。再说回颗粒的挑选。如果恰巧你的财力雄厚,想买 SLC 还是 MLC ,都随便你。
但托尼说句实话,现在硬盘上最难坏的东西就是颗粒了。就算是最差的 QLC 颗粒,1T 硬盘的写入寿命也有 300TBW 左右。就算你每天坚持不懈写入 100GB 的内容,也够你造八年半。而且相对颗粒来说,主控带来的速度提升更加明显。所以咱们在买硬盘的时候,其实更应该关注主控。
主控板又是个什么东西呢?如果把 SSD 比作电脑,那主控板就相当于电脑上主板 + 内存 + CPU 的大集合。它主要起到三个作用:一是合理分配资源,争取让所有的颗粒都有事做,不致于出现旱的旱死涝的涝死这种情况。二则是数据中转,让你的储存单元与电脑上的数据能够正常沟通。三则是负责固态硬盘内部各项更高级指令的完成。对我们来说,主控是固态硬盘上最重要的组件,重要程度甚至比颗粒更高。因为一块硬盘的理论极限性能,是由主控板决定的。而且主控板还不是和品牌捆绑的。就算是英特尔这类大厂,有时候出于成本考虑,也会在自家消费级产品上使用别家的主控。
这也意味着,咱们买大牌子并不一定能买到它们自家的主控。好在查找主控型号也不是件难事。只要是块发布过的硬盘,随便百度一下,就能找到主控板的型号。有了主控板的型号,我们就能在主控厂商的官网找到规格书。
咱们这里就用慧荣的主控作为例子。
规格书里的信息很多,但最值得咱们注意的就是最高性能这一栏。这几个参数里,连续读写速度越高,文件传输就越快,随机读写越快,电脑启动,游戏加载耗时就越短。其次需要关注的,则是 PCIe 协议。如果你的主板只支持 PCIe3.0 ,那我建议你最好不要买 PCIe4.0 的 M.2 ,虽然也能用,但多少有点浪费钱。至于硬盘的固件,版本实在是太多,实在是不能总结出一套辨认的方法。但无脑挑大品牌,问题一般不大。只要是有头有脸做固态的厂商,固件都不会太拉。因为固件得靠自己研发,那些特别小的厂商,真不一定能把它做好。HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e
什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta
我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.
我发现ruby加载路径是一个数组,很多项目都是这样使用的:$:.unshift(File.expand_path("../../lib",__FILE__))可以将本地文件添加到ruby路径数组的前面,方便我们require或者load。所以,我希望知道为什么我们不使用push将文件添加到数组的末尾? 最佳答案 假设您有一个“date.rb”文件(为什么不呢)并且您想要加载这个文件,而不是标准库日期。如果您使用追加,当您调用require'date'时您的文件将永远不会被加载,因为它位于数组的末尾并且标准日期会在之前找到。因此,如果
我有一个这样的哈希{55=>{:value=>61,:rating=>-147},89=>{:value=>72,:rating=>-175},78=>{:value=>64,:rating=>-155},84=>{:value=>90,:rating=>-220},95=>{:value=>39,:rating=>-92},46=>{:value=>97,:rating=>-237},52=>{:value=>73,:rating=>-177},64=>{:value=>69,:rating=>-167},86=>{:value=>68,:rating=>-165},53=>{:va
我在这里对我的部署策略有点困惑,在什么情况下部署时我想向unicorn发送reload信号?例如在我的例子中它会是这样的:sudokill-sUSR2`cat/home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`我一直在通过杀死那个pid来部署我的应用程序,然后通过类似的东西再次启动unicorn:bundleexecunicorn-cconfig/unicorn/production.rb-Eproduction-D我只是想知道为什么要使用重新加载?我可以通过这样做获得部署的任何性能吗? 最佳答案
使用FileUtils方法有什么好处http://ruby-doc.org/core/classes/FileUtils.html比等效的Bash命令? 最佳答案 除此之外,您不必担心确保您的目标平台安装了您正在使用的特定工具这一事实,以及正确引用shell异常的问题(如果您的目标是特别有问题的)Windows和Unix-alikes——尽管有Cygwin、GNUWin32等),如果你使用Ruby的FileUtils,你有一个Ruby函数调用的中等大小的开销,而如果你使用外部实用程序,你有相当大的开销来启动一个外部进程的每一次“调用
在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto