Socket BIO编程实例 NIO编程

源本教育 https://www.bilibili.com/video/av16773924?from=search&seid=11920440178139597593
一、每个socket实例都有一个线程负责
BIO 同步非阻塞形式 实例见博客 BIO Socket网络编程实例 附代码

二、优化 使用线程池
仅仅只是做了个改良,还是阻塞式的

三、NIO
阻塞:接收数据的时候一直等。应用程序在获取网络数据的时候,如果网络传输的很慢,程序就一直等着,直到传输完毕为止。
非阻塞:应用程序直接可以等到数据结束,通知我去取数据。应用程序直接可以获取已经准备就绪的数据,无需等待。
IO为同步阻塞形式,NIO为同步非阻塞方式,NIO没有实现异步,在JDK1.7以后,升级了NIO库包,支持异步非阻塞通信模型,即NIO2(AIO)
同步异步是面向操作系统与应用程序对IO操作的层面来区别的。
同步:应用程序会直接参与IO读写操作,并且应用程序会直接阻塞到某一个方法上,直到数据准备就绪(BIO),或者采用轮询的策略实时检查数据的就绪状态,如果就绪获取数据(NIO)
非同步:所有的IO读写操作都交给操作系统处理,与应用程序没有直接关系,应用程序并不关心IO读写,当操作系统完成IO读写操作时,会向应用程序发出通知,应用程序直接获取数据即可,同步说的是Server服务端的执行方式,阻塞说的是具体的技术,接收数据的方式、状态。

学习NIO编程,了解几个额概念
1Buffer(缓冲区)
ByteBuffer
Channel(管道)
BIO中的输入流和输出流是单向的,Channel可以双向的。
有两类网络Channel和FileChannel

Selector模式:当IO事件(管道)注册到选择器后,Selector会分配很多管道。用一个线程去操作selector
四个状态位

BIO实例代码中 多少个client要对应server多少个线程,能用线程池优化到M:N的程度(Client端M>Server服务器线程数N)
NIO只用起一个线程,比BIO节省资源。
这里写图片描述
BIO和NIO本质还是同步的,因为还是由用户线程去执行读取数据
同步和异步 用户线程执行自己的任务,让内核去把数据拷贝到用户线程。
详情见
https://mp.weixin.qq.com/s/N2oxGd1xeFHT1lN7LkWCkQ

你可能感兴趣的:(网络,java)