读书笔记-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文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
随机推荐
- DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别
DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别 dropwdownist1.items.insert 是可以添加在制定索引处的 而dr ...
- Oracle排序函數Rank
出口給報關行出貨的時候,同一票shipment中合併多個invoice跟packing,轉出到廠商的報關系統時候,出口報關的序號會將invoice的序號做自動增加. 因為wafer會有出口給其他外包做 ...
- http服务 WCF、Web API、Web service、WCF REST之间的区别
http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...
- WM_QUERYENDSESSION与WM_ENDSESSION
此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 首先XP系统和Vista以后的系统,这两个消息的处理方式是不同的. XP系统 系统发送WM_QUERYEND ...
- linux 虚拟机 安装 php-7.0.2
1.安装依赖包 yum -y install libxml2 libxml2-devel openssl openssl-devel libjpeg libjpeg-devel libpng libp ...
- day07-ip地址管理
1. ip地址由网络地址位与主机地址位两部分构成. 如:172.16.45.10/16中网路地址为172.16.0.0.主机地址为172.16.45.10. 2. 查看系统网卡信息:ifconfig: ...
- linux下vim python代码自动补全
一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...
- 关于执行webdriver.Chrome; 报错WebDriverException: Message: unknown error: Element is not clickable at point (1085, 103)
from selenium import webdriverfrom time import sleep dr = webdriver.Chrome() dr.get("http://pj1 ...
- mac 配置charles
从官网下载链接http://www.charlesproxy.com/download 附上注册码: Registered Name: https://zhile.io License Key: 48 ...
- Ngnix,EA(Enterprise Architect)
nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点 ...