消息队列常见面试题

RocketMQ原理详解——零拷贝机制

一台服务器把本机磁盘文件的内容发送到客户端,一般分为两个步骤:
read:读取本地文件内容;
write:将读取的内容通过网络发送出去。

这两个操作发生了两次系统调用,每次系统调用都得先从用户态切换到内核态,等内核完成任务后,再从内核态切换回用户态,也就是消息发送过程中一共发生了 4 次用户态与内核态的上下文切换。另外还发生了 4 次数据拷贝,其中两次是 DMA 的拷贝,另外两次则是通过 CPU 拷贝的,分别是:
在这里插入图片描述
DMA把数据从磁盘拷贝到内核态缓冲区;
CPU把数据从内核态缓冲区拷贝到用户缓冲区;
CPU把数据从用户缓冲区拷贝到内核的网络驱动的 socket 缓冲区;
DMA把数据从网络驱动的 socket 缓冲区拷贝到网卡的缓冲区中。

要想提高文件传输的性能,就需要减少【用户态与内核态的上下文切换】和【内存拷贝】的次数。通过上面的分析可以看出,第2、3次拷贝(也就是从内核空间到用户空间的来回复制)是没有意义的,数据应该可以直接从内核缓冲区直接送入Socket缓冲区。零拷贝机制就实现了这一点。
在这里插入图片描述
rocketmq效率高的原因
在这里插入图片描述

相关推荐

  1. RabbitMQ消息队列见面试题

    2024-06-06 18:06:04       36 阅读
  2. Kafka见面试题

    2024-06-06 18:06:04       40 阅读
  3. ZooKeeper见面试题

    2024-06-06 18:06:04       43 阅读
  4. vue见面试题

    2024-06-06 18:06:04       27 阅读
  5. Redis见面试题

    2024-06-06 18:06:04       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 18:06:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 18:06:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 18:06:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 18:06:04       20 阅读

热门阅读

  1. 糖尿病相关的数据集

    2024-06-06 18:06:04       11 阅读
  2. ActiViz中的纹理映射

    2024-06-06 18:06:04       9 阅读
  3. 搭建python环境以及pip

    2024-06-06 18:06:04       9 阅读
  4. 什么是CSTP测试认证,如何通过CSTP认证?

    2024-06-06 18:06:04       7 阅读
  5. 全文检索&ElasticSearch简介

    2024-06-06 18:06:04       8 阅读