Java原生网络编程

编程中的 Socket 是什么?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式。TCP用主机的
IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)。

短连接
长连接

服务端、客户端、通信编程关注的三件事

原生JDK网络编程-BIO

ServerSocket负责绑定IP地址,
启动监听端口;Socket负责发
起连接操作。连接成功后,双
方通过输入和输出流进行同步
阻塞式通信。

原生JDK网络编程-BIO

原生JDK网络编程- NIO
三大核心组件及关系
Selector
Channel
Buffer
什么是NIO?
操作类型SelectionKey

原生JDK网络编程- NIO之Buffer
重要属性
capacity
position
limit
Buffer的分配、读写和常用操作

应用程序

原生JDK网络编程- NIO之单线程Reactor模式

原生JDK网络编程- NIO之单线程Reactor、工作者线程池模式

原生JDK网络编程- NIO之多线程的Reactor模式

直接内存比堆内存快在哪里?
n  TCP 缓冲区
每个TCP的Socket的内核中都有一个发送缓冲区
(SO_SNDBUF)和一个接收缓冲区(SO_RECVBUF)。

直接内存比堆内存快在哪里?
直接内存相比堆内存,避免了二次拷贝

零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一
个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。
Kafka
Netty
Rocketmq
Nginx
Apache
零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,
从而有效地提高数据传输效率
零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销
Linux的I/O机制与DMA

零拷贝深入辨析

传统数据传送
buffer = File.read
Socket.send(buffer)

4次拷贝,4次上下文切换

Linux之MMAP内存映射

3次拷贝,4次上下文切换

Linux之sendfile

3(2)次拷贝,2次上下文切换

Linux之slice

2次拷贝,2次上下文切换

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值