煎熬的一生需要有人理解
|
内存碎片导致的原因 Redis 中,最常用的是写入、修改、删除数据。这些操作在执行后都会产生 一定程度的内存碎片。 写入数据 Redis 中分配内存是根据固定的大小来划分内存空间的。为了减少分配次数,Redis 会根据申请的内存最接近的固定值分配相应大小的空间。 什么意思呢,假如 Redis 按照 8 字节、16 字节、32 字节、48 字节等来分配内存。当你想要存储一个 18 字节的数据时,此时 Redis 就会分配 32 字节(因为 32 是与 18 最接近的固定值)。如果这时候,再写入的数据需要的内存空间在 14 个字节内,那 Redis 就无需再进行分配了。 这就像你有不同的箱子,为了装东西,你需要找一个体积最接近的箱子来装。但是装进去后,你发现还有空间可以放一些小东西,就无需再找箱子了。 但是,这种分配空间的方式会带来一定程度的内存碎片。我们可以把固定大小的划分空间看成不同体积的箱子,每种箱子里的空间不同程度上都会有剩余。这些剩余的空间就是内存碎片。 修改数据
键值对进行修改时,可能会变大也会变小,相应的就会占用额外空间或者释放不用的空间。 Proactor模型的一般流程 1)应用程序在事件分离器注册读完成事件和读完成事件处理器,并向系统发出异步读请求 2)事件分离器等待读事件的完成 3)在分离器等待过程中,系统利用并行的内核线程执行实际的读操作,并将数据复制进程缓冲区,最后通知事件分离器读完成到来 4)事件分离器监听到读完成事件,激活读完成事件的处理器
5)读完成事件处理器直接处理用户进程缓冲区中的数据 Reactor模型 Reactor的中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪,多路复用器返回,并将事先注册的相应I/O事件分发到对应的处理器中 相关概念介绍:
Reactor的一般流程
(编辑:孝感站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
