I/O
文章平均质量分 96
I/O
jchen104
芝兰生于幽谷,不以无人而不芳
展开
-
Tomcat源码:CoyoteAdapter、Valve#invoke、ApplicationFilterChain
在前文中,我们介绍了Processor如何接收来自EndPoint的Socket,读取字节流解析成 Tomcat Request 和 Response 对象,最后将请求传递给了Adapter做进一步的处理。本文我们就来介绍下一个请求是如何从连接器被转发到容器中并由相应的servlet处理的。目录前言一、CoyoteAdapter2、service3、invoke二、Valve#invoke1、invoke三、ApplicationFilterChain2、doFilter。原创 2023-09-11 10:03:17 · 452 阅读 · 0 评论 -
Java8之BufferedInputStream源码
参考文章:《java.io.BufferedInputStream 源码分析》《IO源码解析--一文说尽BufferedInputStream》《BufferedInputStream 源码学习笔记》《JavaIO之BufferedInputStream详解》写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。前段时间遇到个需求涉及到了IO,趁这机会重新复习了下,这里简单记录下对缓冲流的理解。Java中的缓冲流BufferedInputStr...原创 2021-11-14 23:09:41 · 1608 阅读 · 0 评论 -
Tomcat源码:SocketProcessor、ConnectionHandler与Http11Processor
前文中我们介绍了Acceptor与Poller,其中Acceptor负责监听socket连接,并将请求转交到Poller中调用processSocket方法处理。结合我们之前介绍连接器时的讲解,EndPoint 接收到 Socket 连接后,生成一个 SocketProcessor 任务提交到线程池去处理,SocketProcessor 的 Run 方法会调用 Processor 组件去解析应用层协议,这一操作的起点就是processSocket方法,下面我们就从该方法开始讲起。原创 2023-06-02 11:05:47 · 1214 阅读 · 0 评论 -
Tomcat源码:Acceptor与Poller、PollerEvent
前文中我们介绍到NioEndpoint的start方法启动了Acceptor与Poller这两个异步线程来处理连接请求,本文我们就来接着介绍这两个组件。目录前言一、Acceptor1、构造方法2、run方法LimitLatchNioChannel二、Poller与PollerEvent2、pollerregisterruneventsprocessKey。原创 2023-05-25 21:42:03 · 1672 阅读 · 0 评论 -
Tomcat源码:ProtocolHandler与Endpoint
前文中我们介绍了连接器与其入口Connector以及线程池Executor,而在Connector中则是通过protocolHandler的init与start启动了整个连接器,本文我们就来介绍下protocolHandler与其关键组件Endpoint的内容,以及线程池Executor是如何发挥其作用的。目录前言一、ProtocolHandler1、构造方法1.1、Http11NioProtocol与其抽象父类1.2、 AbstractProtocol与成员变量的赋值2、生命周期方法2.1、init方法。原创 2023-05-19 13:19:19 · 1272 阅读 · 0 评论 -
Tomcat源码:连接器与Executor、Connector
在前面得文章中,我们介绍了Tomcat中得容器是如何从service启动到具体得servlet包装类wrapper得。servlet容器启动后就可以为我们提供访问服务了吗?答案是否定得,因为servlet只规定了如何处理请求,但没有实现请求得分发,这个功能是由tomcat得另一部分连接器来完成得。(图片来源《Tomcat连接器》,左侧为连接器,右侧为容器)连接器的启动点为connector组件,在前文《Tomcat源码:StandardServer与StandardService》原创 2023-05-10 23:00:25 · 1812 阅读 · 0 评论 -
性能优化:Netty连接参数优化
在此前的文章中我们介绍了Netty这一网络编程框架,既然是网络编程,那就必然与网络连接有非常密切的联系。而Netty为了能更好的使用网络连接,提供了一些参数来对网络连接进行设置。在客户端,可以使用Bootstrap.option()函数来配置参数,配置参数作用于SocketChannel。在服务器端,可以使用ServerBootstrap来配置参数,但是对于不同的 Channel 需要选择不同的方法。原创 2022-12-04 15:35:59 · 891 阅读 · 0 评论 -
Netty:粘包与半包的处理
先看如下代码,这个代码是使用netty在client端重复写100次数据给server端,ByteBuf是netty的一个字节容器,里面存放是的需要发送的数据。i < 1000;i++) {}}byte[] bytes = "你好,我的名字是1234567!}}从client端读取到的数据为:从服务端的控制台输出可以看出,存在三种类型的输出一种是正常的字符串输出。一种是多个字符串“粘”在了一起,我们定义这种 ByteBuf 为粘包。原创 2022-11-26 09:59:13 · 235 阅读 · 0 评论 -
Netty:入门(2)
在前文中,我们对Netty的内容做了简单的介绍,本文我们会结合Netty的流程图相对深入一些的介绍下其中的重要组件。原创 2022-11-20 12:52:36 · 720 阅读 · 0 评论 -
Netty:入门(1)
在此前的文章中,我们已经对NIO等内容做了基本介绍,但是java NIO类库和API繁杂,学习成本高,还需要熟悉Java多线程编程才能写出高质量的NIO程序。因此便有了封装好的网络编程框架Netty。(建议在阅读本文前先了解完《IO 模型与多路复用》)。目录前言一、线程模型1、传统阻塞IO线程模2、Reactor模型2.1、单 Reactor 单进程 / 线程2.2、单 Reactor 多线程 / 多进程2.3、多 Reactor 多进程 / 线程二、Netty的基本介绍1、Netty是什么。原创 2022-11-06 15:24:45 · 309 阅读 · 0 评论 -
性能优化:文件传输之DMA、零拷贝与直接IO
我们可以得知,通过使用 mmap() 来代替 read(), 可以减少一次数据拷贝的过程。原创 2022-08-15 09:00:00 · 2150 阅读 · 0 评论 -
Java NIO
1、javaNIO不用再使用多线程来进行IO处理了(包括操作系统内核IO管理模块和应用程序进程而言)。当然实际业务的处理中,应用程序进程还是可以引入线程池技术的2、同一个端口可以处理多种协议,例如,使用ServerSocketChannel测测的服务器端口监听,既可以处理TCP协议又可以处理UDP协议。3、操作系统级别的优化多路复用IO技术可以是操作系统级别在一个端口上能够同时接受多个客户端的IO事件。同时具有之前我们讲到的阻塞式同步IO和非阻塞式同步IO的所有特点。httpshttps。...原创 2022-07-25 09:00:00 · 236 阅读 · 0 评论 -
IO 模型与多路复用
参考资料:《Java IO 模型》《Socket》《高并发网络编程之epoll详解》《Select、Poll、Epoll详解》《I/O 多路复用解析》 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 要讲解I/O模型我们搞懂几个概念。 Socket:中文翻译套接字,百度百科的说法是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,简单来说就是客户端将数据通过网线发送到服务端,客户端发送数据需要一个出口,服务端接收数据需要一个入原创 2022-06-20 08:30:00 · 436 阅读 · 0 评论