读书笔记-NIO的工作方式
读书笔记-NIO的工作方式
1、BIO是阻塞IO,一旦阻塞线程将失去对CPU的使用权,当前的网络IO有一些解决办法:1)一个客户端对应一个处理线程;2)采用线程池。但也会出问题。
2、NIO的关键类Channel和Selector,Selector相当于调度系统,他可以轮询每个Channel的状态,Channel要比Socket更加具体;Buffer类比Stream更加具体;
NIO引入Selector、Channel、Buffer就是想把信息具体化,让程序员有机会控制他们。
3、Buffer是一组基本数据类型的元素列表,Buffer有四个索引:capacity、position、limit、mark,用来标识底层操作系统可以读取的数据位置。
4、Channel获取的IO数据首先要经过操作系统的Socket缓存区,再讲将数据复制到Buffer中,这个操作系统缓存区就是底层TCP所关联的RecvQ或者SendQ队列。
5、NIO的数据访问方式:FileChannel.transferXXX,数据直接在内核空间中移动,减少数据从内核到用户空间的复制;FileChannel.map
6、IO调优:
Linux的iostat命令可以查看系统的IO wait指标是否正常;
提升IO性能:
增加缓存、
设计最优的磁盘方式策略、磁盘寻址策略、这是从底层操作系统层面考虑
索引
应用合理的RAID
TCP网络参数调优
Linux可以通过查看 /proc/sys/net/ipv4/ip_local_port_range文件来查看可以使用的端口范围;
如果发现有大量的TIME_WAIT可以设置/proc/sys/net/ipv4/tcp_fin_timeout
除了上面两个指标,还有TCP连接复用等;
还有一些调优参数,可查看书籍p52页。
查看TCP的统计信息:
cat /proc/net/netstat 查看TCP的统计信息
cat /proc/net/snmp 查看当前系统的连接情况
netstat -s : 查看网络的统计信息
网络IO调优
减少网络交互次数:
设置缓存、合并请求
减少网络传输量:
gzip压缩、尽量通过协议头获取相关信息
尽量减少编码:
尽量以字节形式传送
7、 同步异步:同步就是一个任务的完成需要依赖另一个任务;
阻塞是从CPU的消耗上来说的,阻塞指的是CPU等待慢操作完成之后完成后续工作,非阻塞是不等待慢操作,CPU先干其他事,慢操作完成再来执行后续的事。
读书笔记-NIO的工作方式的更多相关文章
- Java NIO的工作方式
1.BIO带来的挑战 BIO即阻塞IO,不管是磁盘IO,还是网络IO,数据在写入OutputStream或者从InputStream读取时都有可能发生阻塞,一旦有阻塞,当前线程将会被挂起,即线程进入非 ...
- NIO 的工作方式
NIO 的工作方式 BIO 带来的挑战 BIO : BIO 通信模型,通常由一个独立的 Acceptor 线程负责监听客户端的连接,接受到请求之后,为每个客户端创建一个新的线程进行链路处理,处理完成之 ...
- NIO的工作方式
BIO带来的挑战 BIO 就是我们常说的阻塞I/O , 不论磁盘I/O 还是网络/O ,数据在写入OutputStream 或者从 InutStream 读取数据时都有可能会阻塞,一旦有了阻塞,线程就 ...
- Nio经典工作方式
public void selector() throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); Selector ...
- 《Two Days DIV + CSS》读书笔记——CSS控制页面方式
1.1 你必须知道的知识 (其中包括1.1.1 DIV + CSS的叫法解释:1.1.2 DIV + CSS 名字的误区:以及1.1.3 W3C简介.由于只是背景知识,跳过该章.) 1.2 你必须掌握 ...
- Buffer的工作方式
1.Buffer的工作方式 前面<java NIO的工作方式>介绍了Selector检测到通信信道I/O有数据传输时,通过select()方法取得SocketChannel,将数据读取或写 ...
- 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程
第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...
- (读书笔记)第2章 TCP-IP的工作方式
第2章 TCP-IP的工作方式 TCP/IP协议系统 为了实现TCP的功能,TCP/IP的创建者使用了模块化的设计.TCP/IP协议系统被分为不同的组件,每个组件分别负责通信过程的一个步骤.这种模块化 ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
随机推荐
- android 多点触控
多点触控 1.多点触控从字面意思讲就是你用大于等于2根的手指触摸子啊手机屏幕上. Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEv ...
- 【转载】C# DataGridView 通过代码设置样式
// 表格上下左右自适应 dataGridView.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | An ...
- C#转java
懂C#的话,转Java也不是那么难,毕竟,语言语法还是相似的.尝试了下Java,说说自己的体会吧. 一,Java和C#都是完全面向对象的语言.在面向对象编程的三大原则方面,这两种语言接近得不能再接近. ...
- C#帮助类:MD5加密
/// <summary> /// MD5加密 /// </summary> public class Md5 { /// <summary> /// MD5加密 ...
- 家用wifi信号覆盖增强扩展实用指南
家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...
- Linux虚拟机安装 nginx (nginx1.9.9)
1.安装基础环境包(如果已安装,可更新) yum -y :自动选择y yum -y install openssl* yum -y install libjpeg libjpeg-devel libp ...
- Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
#include<bits/stdc++.h>using namespace std;int st[1000007];int top;int s[1000007],t[1000007];i ...
- 如何处理html中的内联元素之间水平空隙
写HTML时把需要紧挨着的内联元素写在一行,设置其父容器的font-size为0,再设置内联元素的字体大小,例如: <!DOCTYPE html> <html lang=" ...
- LVS解决高并发,大数据量
http://www.360doc.com/content/14/0726/00/11962419_397102114.shtml LVS的全称Linux vitual system,是由目前阿里巴巴 ...
- python基础之内置函数(一)
内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...