加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.com.cn/)- 运营、云管理、管理运维、云计算、大数据!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

在VirtualBox中增加现有虚拟机的磁盘大小

发布时间:2021-02-04 16:24:17 所属栏目:传媒 来源:互联网
导读:如何解决内存碎片 你可能会有疑问,内存碎片会有什么危害呢? 我们还是以上边的箱子来表示。你想想,如果你要把这些箱子都装上车运走,每个箱子里都有空出来的空间(内存碎片),那么运行一次的效率及性价比是不是会很低。同样,在 Redis 中,由于大量的碎片存

如何解决内存碎片

你可能会有疑问,内存碎片会有什么危害呢?

我们还是以上边的箱子来表示。你想想,如果你要把这些箱子都装上车运走,每个箱子里都有空出来的空间(内存碎片),那么运行一次的效率及性价比是不是会很低。同样,在 Redis 中,由于大量的碎片存在,会导致实际利用率变低。

那么我们有没有办法来解决内存碎片呢?

推倒重来

第一种方式很简单,直接推倒重来。也就是把 Redis 直接重启完事儿,内存一断电全世界就清净。但是这种暴力省事的方式却有很多隐患。

生产环境中你这么搞的话得提前烧烧香,保佑不会出什么问题。如果你没进行过持久化,那么就别烧了,烧了也没用。如果有持久化的话,那么恢复时长还得取决你持久化文件的大小,在这个阶段还无法提供服务。糟心不?

空间置换

那么有没有不这么刺激的方式。

有的,高版本的 Redis 提供了内存碎片清理的方式。一言以蔽之,就是空间置换。

怎么个置换法?我们的目的是为了消除内存碎片,那么我们把已使用的内存数据重新整理到一起不就行了吗?让不连续的空间变成连续的,剩下的空间,继续来分配。

画个图理解下:
 

roactor和Reactor的区别

Proactor是基于异步I/O的概念,而Reactor一般则是基于多路复用I/O的概念

Proactor不需要把数据从内核复制到用户空间,这步由系统完成

欢迎指正文中错误

参考文章

聊聊Linux 五种IO模型[1]

网络io模型[2]

网络IO[3]

5种网络IO模型[4]

epoll原理详解及epoll反应堆模型[5]
 

那如果我将数据 A 从 3 字节修改为 4 字节呢?此时为了保持数据 A 的空间连续性,操作系统会把 B 拷贝到别的空间。此时又会出现 1 个字节的碎片。

删除数据

理解了修改数据,删除数据就很容易明白了。还是上边的例子,此时删除了数据 B,那么就释放了 2 个字节的空间。这样对于整个内存空间来说就产生了 2 个字节的碎片。

(编辑:孝感站长网)

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

    推荐文章
      热点阅读