加入收藏 | 设为首页 | 会员中心 | 我要投稿 信阳站长网 (https://www.0376zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

编程语言安全漏洞

发布时间:2021-02-01 16:35:07 所属栏目:传媒 来源:互联网
导读:再回到高并发,为什么高并发要使用协程,为什么比多线程要快效率要高?在我看来有两个原因: 1、每一个协程消耗的内存非常低。每一个线程有多高吗?给你搞了一个堆内存池,你说一个字节搞一个内存池,线程都有栈,栈什么时候会溢出呢?栈到底有多大呢?一般

再回到高并发,为什么高并发要使用协程,为什么比多线程要快效率要高?在我看来有两个原因:

1、每一个协程消耗的内存非常低。每一个线程有多高吗?给你搞了一个堆内存池,你说一个字节搞一个内存池,线程都有栈,栈什么时候会溢出呢?栈到底有多大呢?一般是2MB到8MB,这么大的线程,可以想象有多少的内存?

如果几十G的内存上并发10000个线程,内存都不够,其他业务就做不了了。

最大的问题是同时处理一个请求消耗的内存不能多,而协程就能做到。基本上协程几KB到十几KB就可以处理一个请求。所以可以轻松通过十几G的内存并发到几万个、十几万个请求。

2、切换成本低。在线程上做切换时有一个内核态到用户态的切换,而且要做大量的拷贝。在协程的话,因为是全栈用户态,切技能器,或者是不切技能器,直接调度到代码里面切一下就可以了,所以相对来说成本也是很低的。
 

关于磁盘高速的缓存,还有很多可以分享的。

比如说SDD,SDD在我看来是另外一个物种。平时大家都认为“SDD 比机械硬盘的 IOPS 高,Latency 低,Thoughtput 更高,即总的吞吐量更高”绝对不是简简单单这么一点东西。

我举个例子:第一,SSD有个问题叫写入放大。

大家都知道 Kafka,Kafka 性能为什么这么好?一个特点就是削峰填谷,它要把数据持久化。既然是写硬盘性能为什么能这么好?因为它充分利用了磁盘的旋转速度,消息队列先天性是时序队列,一定不停的往一个文件后面追加,所以磁盘利用率非常高,只要放很多块机械磁盘,性能还可以继续提升。

如果换了SSD,还有这样的好处吗?SSD 本来就是快很多,但再采用这种方式就有问题,因为它有写入放大问题,什么叫写入放大?比如说我们本来是写日志文件,都往后面追加一些字节,但是 SSD 不行,SSD有一个页面,是它的基本单位,它是按页面来的。

比如说现在的页面上已经有了一个字节,现在还想写第二个字节,它会把整个页面读到缓存区中,然后给它加进去,最后再写到一个新的没有人写过的页面,所以有很大的放大作用。每写一个字节,可能给我写了几K,它最怕的是 inplace 这种原地写入,那像 Kafka 再采用的方式会有问题。

第二,耗损平衡。

SSD的寿命不好,什么寿命短呢?因为它不能清除,每一个存储单元清除的次数是有限制的。如果一个硬盘有一个数据特别热,比如说就是放操作系统的,经常读写,读着就坏了,这个是大家受不了的,其他地方都好。所以搞了一个GC,不停给你移,这边是热数据的,这边是冷数据的,我给你移过去,移过去之后大家就平衡,这块磁盘就不会那么快坏。

但这个机制就有问题,给应用程序带来了挑战。如果应用程序按照传统的方式去写,不停大量的写入操作进去,就会不停触发机制,当他的GC赶上过米的时候,又变成阻塞了,性能又下去了。

其实 SSD 有很多和 HDD 不一样的地方,比如说机械硬盘的时候,绝对不会考虑多开几个线程,让速度变快,因为硬盘就在那里转,多开线程最终还是排队的,但是SSD不一样,你多开几个,它就是那么快,因为它先天可以做并发。

比如说 SSD 做随机读写也做得特别好,我们在机械硬盘上尽量减少数据读写的,但到SSD就可以读写。

(编辑:信阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读