深入分析java web内幕(java IO 工作机制(2)(连接建立和断开的状态变化))
java IO 工作机制(2)(补充1)(连接建立和断开的状态变化)
1,tcp状态转换图:





好处:

2,影响网络传输的因素:

PS:
tcp传输数据通过窗口来控制。
窗口即tcp缓存的大小。
窗口的大小=带宽 x 响应时间
数据传输:

PS:
阻塞:当发送队列填满就发送给接收队列,接收队列被填满,发送队列的write()方法会阻塞,直到接收队列有空间。
new io工作机制:


PS:
传统socket:
数据通过socket的输入输出流传输数据,流的缓存由发送队列和接收队列决定。
(队列大小应该就是上面提到的窗口,由带宽和响应时间决定)
当数据大于发送队列长度不能控制,由系统将数据分割,需要用户空间数据和内核地址空间进行切换。
newIO:
数据通过channel的Buffer来传输,Selector来调度。
Buffer相当于发送/接收队列,但buffer大小可以主动控制。




tomcat和jetty服务器使用阻塞模式处理连接,使用NIO处理请求。
基于NIO的socket处理过程:


Buffer工作方式:

capacity:容量
position:将操作元素的位置,读写可以进行转换
limit:实际数据大小
mark:标记位置

以上是buffer写读索引变化。

缓存分两部分: 一,系统缓存(tcp的接收/发送队列); 二,应用缓存(通常程序员控制) buffer 提供了两种形式缓存支持。 直接操作系统缓存buffer即DirectByteBuffer,但可能存在内存泄露。

浙公网安备 33010602011771号