读书笔记-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先干其他事,慢操作完成再来执行后续的事。

    

时间: 2024-12-28 18:26:47

读书笔记-NIO的工作方式的相关文章

Java NIO的工作方式

1.BIO带来的挑战 BIO即阻塞IO,不管是磁盘IO,还是网络IO,数据在写入OutputStream或者从InputStream读取时都有可能发生阻塞,一旦有阻塞,当前线程将会被挂起,即线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,线程将会失去CPU的使用权,即线程暂停运行,这在当前的大规模访问量和有性能要求的情况下是不能被接受的.虽然当前的网络I/O有一些解决办法,如一个客户端一个处理线程,出现阻塞时只是一个线程阻塞而不会影响其他线程工作,还有为了减少系统线程的开销  ,

NIO 的工作方式

NIO 的工作方式 BIO 带来的挑战 BIO : BIO 通信模型,通常由一个独立的 Acceptor 线程负责监听客户端的连接,接受到请求之后,为每个客户端创建一个新的线程进行链路处理,处理完成之后,线程销毁.是典型的 请求-应答通信模型. BIO 即阻塞 IO,不管是磁盘IO 还是 网络 IO,数据在写入 OutputStream 或者从 InputStream 读取时都有可能会阻塞,一旦有阻塞,线程将会失去 CPU 的使用权,这在当前的大规模访问量和有性能要求的情况下是不能被接受的. 虽

Nio经典工作方式

1 public void selector() throws IOException { 2 ByteBuffer buffer = ByteBuffer.allocate(1024); 3 Selector selector = Selector.open(); 4 ServerSocketChannel ssc = ServerSocketChannel.open(); 5 ssc.configureBlocking(false);//设置为非阻塞模式 6 ssc.socket().bin

《Linux0.11内核完全注释》读书笔记之内核启动方式总结

Linux0.11启动方式 BIOS启动 当PC电源打开后,80X86结构的CPU将自动进入实模式,并从0xFFFF0开始自动执行程序, 这通常是ROM-BIOS中的地址.PC机的BIOS将执行某些系统检测,并在物理地址0处开始初 始化中断向量.此后将可启动设备的第一个扇区读入内存绝对地址0x7C00处,并跳转到这 个地方. bootsect.s/setup.s bootsect.s Linux最前面的部分是boot/bootsect.s,它将由BIOS读入到内存绝对地址0x7C00处, 当它被

【excel技巧读书笔记014】工作界面的底部显示计数、求和

设置状态栏,在Excel的工作界面底部,显示各种状态信息,单元格模式.功能键开关等.选中数据会显示求和.计数.平均值.数值计数等.

Buffer的工作方式

1.Buffer的工作方式 前面<java NIO的工作方式>介绍了Selector检测到通信信道I/O有数据传输时,通过select()方法取得SocketChannel,将数据读取或写入Buffer缓冲区,下面讨论Buffer如何接受和写出数据.通过查看JDK源码可知道,Buffer的构造函数 Buffer(int mark, int pos, int lim, int cap) { // package-private if (cap < 0) throw new IllegalA

Java NIO读书笔记

简介 NIO的作用就是改进程序的性能.因为有时候程序的性能瓶颈不再是CPU,而是IO.这时候NIO就派上用场了.NIO的原理就是尽量利用系统底层的资源来提高效率,比如利用DMA硬件减小CPU负荷,利用操作系统的epoll机制避免线程频繁切换.通过底层资源提高系统的吞吐量. 缓冲区 缓冲区就是一个固定大小的一组数据.缓冲区有四个非常重要的属性:容量,限制,位置,标记.容量就是一个缓冲区最大能容量的元素数量,限制就是对容量进行逻辑上的限制,位置用于跟踪get或者put方法的位置,标记用于reset函

《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server数据库文件分配方式 1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL Server存储在一些系统视图里的空间使用统计信息计算出的结果,如果没有更新空间统计信息,比如刚刚发生大数据插入,sp_spaceused的结果就不准确.3.这个命令主要是针对普通用户的数据库,对

&lt;Getting Things Done&gt; 搞定I 无压工作的艺术 读书笔记

最近感觉时间管理做的特别差,上周末好多事乱成一锅粥.于是借来同事的书来看,发现真的写的特别好! 在这里挑重点和自己的心得总结一下. 第1章 问题: 1. 现代社会的事情不断涌现,已经不是把事情做个列表,先做重要紧急的,这样简单的做法就能应付得了. 2. 很多要去做的事情被我们存在了大脑里,只是记得需要去做,增加心理压力,却没时间真正去实施.这样的缓存其实是造成我们低效率的一个原因. 目标:做每件事都处于一种忘我的境界,心如止水,享受其中.(我们都曾经无意识地达到过这种最高境界,但是却不能控制自己