传统拷贝
1.
DMA拷贝
磁盘内容到OS缓冲区 ->CPU拷贝
OS缓冲区内容到用户应用缓冲区 ->CPU拷贝
用户应用缓冲区内容到socket ->DMA拷贝
socket内容到网卡
2.全程 4次用户态与内核态的切换、2次CPU拷贝
、2次DMA拷贝
sendfile零拷贝
1.
DMA拷贝
磁盘内容到OS缓冲区 ->DMA拷贝
OS缓冲区的offset和length(消耗几乎可以忽略),到socket ->DMA拷贝
socket的offset、length、OS缓存区的内容到网卡
2.全程 4次用户态与内核态的切换、2次DMA拷贝,非常快(DMA拷贝
一般是CUP拷贝
的10倍)
mmap零拷贝
DMA拷贝
磁盘内容到OS缓冲区 -> 用户应用缓冲区与OS缓冲区做映射(共享) ->CPU拷贝
OS缓冲区内容到socket ->DMA拷贝
socket的内容到网卡- 全程 4次用户态与内核态的切换、1次
CPU拷贝
、2次DMA拷贝
Kafka(Apache维护)
1.单机并发极限2000W,600M超高吞吐量
2.毫秒级响应,不支持事务,内置分布式集群支持,java语言编写
3.消息可以按分区顺序消费
4.sendfile零拷贝
5.适合大量据处理数据的业务
RabbitMQ(Spring官方维护)
1.单机并发万级,中等吞吐量
2.低延迟,支持分布式事务,支持集群,erlang语言编写
3.消息可以按顺序消费,可做延迟队列(死信队列+设置消息过期时间)
4.传统拷贝
5.适合高并发高可用的业务,电商物流
RocketMQ(阿里自研)
1.单机并发万级,高吞吐量
2.毫秒级响应,支持事务,内置分布式集群支持
3.消息可以按顺序消费,可做延迟队列(内置)
4.mmap零拷贝
5.适合高并发高可用的业务,电商物流