零拷贝

零、零拷贝概念

Zero-copy“ describes computer operations in which the CPU does not perform the task of copying data from one memory area to another. —— wikipedia

如维基百科所说,零拷贝是指避免CPU在不同的内存区域间拷贝数据。这可具体细分为操作系统级(OS level)别和用户态(User level)级别。

阅读更多

Netty高性能分析

一、Netty高性能分析

1)使用NIO多路复用技术,使其能高效的支持大量的客户端连接

2)使用主从Reactor模型,BossGroup和WorkerGroup分工明确,BossGroup只负责接收Channel,加快了客户端建立连接的速度。

阅读更多

Netty核心组件源码分析

以下结构图和流程图通过阅读netty-all-4.0.19.Final.jar源码分析而来。本文主要是以Server端执行过程进行分析。

零、Netty使用示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class ChatServer {
public static void main(String[] args) throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();

ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new DelimiterBasedFrameDecoder(MAX_FRAME_LENGTH, DELIMITER));
ch.pipeline().addLast(new StringDecoder());
ch.pipeline().addLast(new StringEncoder());
ch.pipeline().addLast(new ChatServerHandler());
}
});

ChannelFuture channelFuture = serverBootstrap.bind(LISTEN_PORT).sync();
System.out.println("ChatServer started.");
channelFuture.channel().closeFuture().await();
}
}
阅读更多

Netty聊天室Demo

一、概述

本文使用Netty实现了简单的聊天逻辑,旨在理解Netty的API使用,粘包拆包,编解码,处理器链的内容。

应用层需要对接收到的TCP数据包的粘包拆包情况进行必要处理,粘包拆包如下图:

阅读更多

Scalable_IO_in_Java

本文是Scalable IO in Java的翻译,旨在了解java中IO的React模式。为了更清晰的理解,我调整了文章的部分顺序。

大纲

  • 可扩展的网络服务
阅读更多

IO

一、IO概念

IO是计算机程序和磁盘,网卡等外部资源进行交互的接口。而这些敏感资源都是由操作系统进行统一管理的,所有计算机语言的IO操作最终都是通过操作系统提供的系统调用函数来实现的。

image-20210124155035560

阅读更多