IO模型
文章平均质量分 78
u014753478
The advance of technology is based on making it fit in so that you don't really even notice it, so it's part of everyday lift.
展开
-
网络编程七
实现UDP单播和广播UDP 这样的无连接协议中,并没有持久化连接这样的概念,并且每个消息(一个UDP 数据报)都是一个单独的传输单元。此外,UDP 也没有TCP 的纠错机制。通过类比,TCP 连接就像打电话,其中一系列的有序消息将会在两个方向上流动。相反,UDP 则类似于往邮箱中投入一叠明信片。你无法知道它们将以何种顺序到达它们的目的地,或者它们是否所有的都能够到达它们的目的地。UDP的这些方面可能会让你感觉到严重的局限性,但是它们也解释了为何它会比TCP快那么多:所有的握手以及消息管理机制的开原创 2021-06-29 20:57:43 · 136 阅读 · 0 评论 -
网络编程六
解决粘包/半包问题回顾我们的的Hello,Netty再讲解一遍,加上注释什么是TCP粘包半包?改造程序,客户端发送100遍消息假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。(1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;(2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;(3)服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容原创 2021-06-29 20:53:11 · 76 阅读 · 0 评论 -
网络编程五
Netty组件再了解Channel、EventLoop 和ChannelFutureNetty 网络抽象的代表Channel—Socket;EventLoop—控制流、多线程处理、并发;ChannelFuture—异步通知。Channel 接口基本的I/O 操作(bind()、connect()、read()和write())依赖于底层网络传输所提供的原语。在基于Java 的网络编程中,其基本的构造是class Socket。Netty 的Channel 接口所提供的API,被用原创 2021-06-29 20:50:54 · 924 阅读 · 0 评论 -
网络编程四
Netty是什么?为什么要用Netty?为什么要用Netty1、虽然JAVA NIO框架提供了 多路复用IO的支持,但是并没有提供上层“信息格式”的良好封装。例如前两者并没有提供针对 Protocol Buffer、JSON这些信息格式的封装,但是Netty框架提供了这些数据格式封装(基于责任链模式的编码和解码功能);2、直接使用NIO需要需要额外的技能,例如Java多线程,网络编程;3、要编写一个可靠的、易维护的、高性能的NIO服务器应用。除了框架本身要兼容实现各类操作系统的实现外。更重要原创 2021-06-29 20:48:24 · 65 阅读 · 0 评论 -
网络编程二
TCP/IP中的数据包每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。 ① .原创 2021-06-29 20:45:56 · 85 阅读 · 0 评论 -
Epoll的两种工作方式
epoll对文件描述符的操作由两种模式:LT(level trigger)和ET(edge trigger)。LT模式是默认模式,两者区别如下: LT模式:当epoll_wait检测到文件描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。下次调用epoll_wati时,会再次响应应用程序并通知次事件。 ET模式:当epoll_wait检测到文件描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。如果不处理,下次调用epoll_wait时,不会再...原创 2021-06-24 09:49:14 · 902 阅读 · 0 评论 -
计算机IO模型六、多路复用器及Epoll
1. NIO概念介绍: NIO(Non-Blocking I/O,java中,也称为New I/O),是一种同步非阻塞的I/O模型,也就是I/O多路复用的基础,已经被越来越多的应用到大型应用服务器中,是解决高并发,I/O处理问题的有效方式。NIO可以通过一个或者几个线程去解决N个IO连接的问题。 非Epoll模型存在的弊端:每循环一次,都会有O(N)的时间复杂度,比如有一万个连接,每循环一次,都存在系统调用去调用accept或者recv方法,很多调用时无意义的,浪费资源的。因为系统调...原创 2021-03-02 11:10:37 · 240 阅读 · 2 评论 -
计算机IO模型五、网络IO模型
1. lsof -p可以查看某一个进程里面的文件描述符; netstat -antp 可以查看内核态socket建立的过程; tcpdump是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。2. 服务端起来之后可以通过netstat -antp命令查看对应端口的状态;3.通过tcpdump -nn -i eth0 port 9090 命令可以看到三次握手的详细过程;4. TCP是面向连接的可靠传输层协议,三次握手之后内核级开辟资源,..原创 2021-03-02 09:50:38 · 113 阅读 · 0 评论 -
计算机IO模型四、java堆内、外内存的一些说明
1. 定义:关于java堆内存和直接内存的介绍,我在google上面看了一些文章,比较准确的介绍如下:Java Heap Memory The Java application runs in the JVM, and the java heap memory is the memory allocated by the JVM for the java application. The JVM is designed to isolate aplications from the ...原创 2021-03-01 18:04:22 · 317 阅读 · 0 评论 -
计算机IO模型三、NIO相关知识
NIO 介绍1. java在JDK1.4版本之后推出了新的IO系统,也就是NIO(new IO),也可以理解为非阻塞IO(Non-Blocking IO)。《java NIO》中介绍了nio出现的原因:操作系统与 Java 基于流的 I/O模型有些不匹配。操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取( DMA)的协助下完成的。而 JVM 的 I/O 类喜欢操作小块数据——单个字节、几行文本。结果,操作系统送来整缓冲区的数据, java.io 的流数据类再花大量时间把它们拆成小原创 2021-03-01 16:55:33 · 520 阅读 · 0 评论 -
计算机IO模型二、pageCache、mmap作用
前言 文章开始前先推荐两本书,《深入理解linux内核》可以帮助大家对内核有一个系统的理解,《深入理解计算机系统》可以夯实对操作系统的了解1. 物理内存:物理内存中有内核,有应用程序,程序在物理内存中是不连续的。但是在线性地址中是连续的。线性地址和物理地址有一个映射关系。计算机操作系统在分配数据和程序的时候不会全量分配,程序在执行一段之后会存在缺页异常,这个时候会存在用户态和内核态的切换,内核会从磁盘加载需要的数据。2. 内核配置参数:vm.dirty_backgrou...原创 2021-03-01 14:44:03 · 530 阅读 · 0 评论 -
计算机IO模型一、内存与IO,磁盘IO,网络IO
前言 最近在学习研究计算机IO模型,对于从不同渠道搜集的资料以及自己的理解做一个整理和总结。1.内核态会存在缓存页,pageCache,这就是第二次读取文件比第一次快的原因。内核提供了一份缓存供多个程序读取。 FD文件描述符,fd是交给程序用的,类似于java中的迭代器,每个线程维护自己的迭代器,就是集合的指针,用来遍历集合。2.内核态有个dirty 标志,用来标识程序对文件进行了修改,如果为dirty,就会flush到磁盘上,进行持久化。至于怎么flush,由内核来决定什么时候flush...原创 2021-03-01 14:02:36 · 500 阅读 · 0 评论