浅谈NIO和Epoll实现原理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1 前置知识

1.1 socket是什么?

就是传输控制层tcp连接通信。

1.2 fd是什么? fd既file descriptor-文件描述符。Java中用对象代表输入输出流等...在Linux系统中不是面向对象的,是一切皆文件的,拿文件来代表输入输出流。其实是一个数值,例如1,2,3,4...0是标准输入,1是标准输出,2是错误输出...

相关视频讲解:

C++后台开发学习视频

支撑亿级IO的底层基石 epoll实战揭秘

任何进程在操作系统中都有自己IO对应的文件描述符,参考如下:

[root@iZj6c1dib207c054itjn30Z ~]# ps -ef | grep redis
root     20688     1  0 Nov23 ?        00:01:01 /opt/redis/bin/redis-server 127.0.0.1:6379
root     20786     1  0 Nov23 ?        00:01:00 /opt/redis/bin/redis-server 127.0.0.1:6380
root     30741 30719  0 12:26 pts/1    00:00:00 grep --color=auto redis
[root@iZj6c1dib207c054itjn30Z ~]# cd /proc/20688/fd
[root@iZj6c1dib207c054itjn30Z fd]# ll
total 0
lrwx------ 1 root root 64 Nov 23 21:50 0 -> /dev/null
lrwx--
java epoll_Java NIO(一)select epoll底层实现原理 一 内核接受网卡流量的整个流程预备知识:网络编程的核心对象是socket,当创建socket时在底层会创建一个由文件系统管理的socket对象。这个对象包括了发送缓冲区,接收缓冲区,等待队列。recv函数用于从某一个socket中接受流量,但是这个函数在被调用入进程会一直处于阻塞状态,直到从该socket收到数据为止。网卡接收流量的流程:步骤一:进程中调用了recv函数请求接收指定socket的流... 阅读详情

相关推荐

深入Hotspot源码与Linux内核理解NIOEpoll

一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO它背后的原理之后,去查看Netty的源码就有如神助!我们今天就从最基本的IO、以及NIO学起!后续会跟新Netty源码系类的文章,有兴趣的小伙伴可以关注公众号 【源码学徒】 二、操作系统是如何定义I/O的 I/O相关的操作,详细各位从事java的人员并不陌生,顾名思义也就是Input/Output,对应着连个

皇甫嗷嗷叫 385

NIOepoll

文章目录epoll 与 select第一部分:select epoll的任务select 的做法epoll的做法第二部分:epoll详解epoll 系统调用epoll高效的原因epoll综合的执行过程epoll 水平触发(LT)边缘触发(ET)的实现第三部分:epoll高效的本质NIO传统BIO模型分析NIO是怎么工作的常见I/O模型对比如何结合事件模型使用NIO同步非阻塞特性优化线程模型NIO在客户端的魔力每连接顺序请求的Redis多连接短连接的HttpClient常见的RPC框架,如Thrift,

m0_51380306的博客 2229

深入了解NIO底层原理

Redis 为何能支持高并发? Redis底层采用NIO中的多路IO复用的机制,很好地支持高并发,并且能实现线程安全。 Redis官方没有windows版本,只有Linux版本。 NIO在不同的操作系统上实现的方式有所不同,在Windows操作系统使用select实现轮训,而且还存在空轮训的情况,效率非常低。时间复杂度是为O(n)。其次默认对轮训的数据有一定限制,所以难于支持上万的TCP连接。 在Linux操作系统采用epoll实现事件驱动回调,不会存在空轮训的情况,只对活跃的socket连接实现主动回调,

陈皮的JavaLib 2648

epoll nio区别_深入理解NIO(四)—— epoll实现原理

深入理解NIO(四)—— epoll实现原理终于来到最后了,万里长征只差最后一步 ( `д´) !简单流程梳理我们先从只监听一个socket开始讲起:首先我们有一个程序A,他运行这下面这样一段代码://创建socketint s = socket(AF_INET, SOCK_STREAM, 0);//绑定端口bind(s, ...)//监听listen(s, ...)//接受客户端连接int c...

weixin_39766014的博客 246

浅谈NIOEpoll实现原理

什么是NIO NIO又叫非阻塞IO,这个概念基本人人都懂,但是不一定每个人都懂他相比BIO到底非阻塞了哪里。 这里我们用一个BIO的例子来探讨这个问题 /** * 这是一个BIOServer * @author endless * @create 2020-03-23 */ public class BioServerDemo { public static void main(S...

随手笔记 5850

epoll原理_浅谈NIOEpoll实现原理

什么是NIONIO又叫New/Non-blocking IO,这个概念基本人人都听过,但是不一定每个人都懂他它的运行的原理。这里我们来探讨这个问题,先用一个例子解释一下BIO到底阻塞了哪里。/** * 这是一个单线程BIOServer * @author endless * @create 2020-03-23 */public class BioServerDemo { public stat...

weixin_39780260的博客 212

epoll nio区别_浅谈NIOEpoll实现原理

NIO又叫New/Non-blocking IO,这个概念基本人人都听过,但是不一定每个人都懂他它的运行的原理。这里我们来探讨这个问题,先用一个例子解释一下BIO到底阻塞了哪里。/*** 这是一个单线程BIOServer* @author endless* @create 2020-03-23*/public class BioServerDemo {public static void main...

weixin_39791322的博客 121

c语言实现 windows socket_浅谈NIOEpoll实现原理

什么是NIONIO又叫New/Non-blocking IO,这个概念基本人人都听过,但是不一定每个人都懂他它的运行的原理。这里我们来探讨这个问题,先用一个例子解释一下BIO到底阻塞了哪里。/** * 这是一个单线程BIOServer * @author endless * @create 2020-03-23 */public class BioServerDemo { public stat...

weixin_36147808的博客 649

Java网络编程NIO详解7:浅谈 LinuxNIO Selector 的实现原理

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《不可轻视的Java网络编程》其中一篇,本文部分内容来源于网...

AliCoder的博客 1023

浅谈NIO(Non-blocking I/O)

浅谈NIO浅谈NIO(Non-blocking I/O)1> BIO (Blocking I/O)2> 同步,异步,阻塞、非阻塞3> 程序在请求网络时,到底做了什么?IO有什么关系?4> NIO原理5> NIO示例6> NIO适用场景其他内容:优化线程模型事件分发器EPolllinux大于 2.6) Poll(linux 小于2.6)read()wri...

winrainbow的博客 849

linux java 网络编程_Java网络编程NIO详解7:浅谈 LinuxNIO Selector 的实现原理

Java网络编程NIO详解7:浅谈 LinuxNIO Selector 的实现原理浅谈 Linux 中 Selector 的实现原理概述Selector是NIO实现I/O多路复用的关键类。Selector实现了通过一个线程管理多个Channel,从而管理多个网络连接的目的。Channel代表这一个网络连接通道,我们可以将Channel注册到Selector中以实现Selector对其的管理...

weixin_32631729的博客 227

浅谈 Linux 中 Selector 的实现原理

概述 Selector是NIO实现I/O多路复用的关键类。Selector实现了通过一个线程管理多个Channel,从而管理多个网络连接的目的。 Channel代表这一个网络连接通道,我们可以将Channel注册到Selector中以实现Selector对其的管理。一个Channel可以注册到多个不同的Selector中。 当Channel注册到Selector后会返回一个SelectionKe...

mhHao的博客 665

java网络编程_Java网络编程NIO详解7:浅谈 LinuxNIO Selector 的实现原理

本文转自互联网本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客:http://www.how2playlife.com本文是微信公众号【Java技术江湖】的《不可轻视的Java网络编程》其中一篇,本文部分内容来源于网络,为了把本文...

weixin_39979617的博客 109

JDK——NIO系统调用浅析

JDK里,Java标准库部分工具的源码中,BSDLinux的平台相关源码都是在solaris目录里的。 原本Sun JDK的源码里平台相关的目录就是从solariswindows这两个目录开始的,后来Unix系列的平台相关代码全都放在solaris目录下了,共用大部分代码。 JDK底层代码 native 方法 openjdk\jdk\src\solaris\native\sun\nio\ch\EPoll.c openjdk\jdk\src\solaris\classes\sun\nio\ch.

无限迭代中...... 1206

Java网络编程(七):浅谈 Linux 中 Selector 的实现原理

概述 Selector是NIO实现I/O多路复用的关键类。Selector实现了通过一个线程管理多个Channel,从而管理多个网络连接的目的。 Channel代表这一个网络连接通道,我们可以将Channel注册到Selector中以实现Selector对其的管理。一个Channel可以注册到多个不同的Selector中。 当Channel注册到Selector后会返回...

萝卜代码 798

【java IO】|java NIO总结

在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。也就是说,当一个线程执行一个 I/O 操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈,因为需要为每个连接创建一个线程,而线程的创建切换都是有开销的。) —(New IO,也称为 Non-blocking IO)。NIO 弥补了同步阻塞 I/O 的不足,它在标准 Java 代码中提供了非阻塞、面向缓冲、基于通道的 I/O,可以使用少量的线程来处理多个连接,大大提高了 I/O 效率并发。

u012203062的博客 1240
上一篇: 红黑树的原理以及实现
下一篇: Linux性能优化—内存实战篇
Linux服务器开发
博客等级 码龄7年 609粉丝 589原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值