2022 flag 150编文章 - 005 java 网络编程
鸡汤一碗
当你遇到一件事,感觉无法解决,甚至已经影响到你生活和心情时,何不停下脚步,多些冷静,多些思考,换个角度,换个空间,换种方法,换个思路,也许事情会简单许多。一昧原地踏步、绕圈或太执着,只会让自己陷入痛苦深渊。生命总有挫折,但那不是尽头,只是在提醒你:该转弯了!
大纲
1. 阻塞I/O, 非阻塞I/O
2. 多路复用I/O模型
3. Java NIO
知识点
1. 阻塞I/O, 非阻塞I/O
阻塞IO与非阻塞IO区别请求IO内核是否会立刻返回、用户线程是否会挂起。阻塞:用户线程向内核发出I/O请求,然后用户线程挂起、等待I/O请求结果; 非阻塞:用户线程向内核发出I/O请求,内核立刻返回、用户线程不会挂起。 但是它并不知道这个IO操作是否真的成功了,为了知道IO操作是否成功,一般有两种策略:一是需要应用程序主动地循环地去问kernel(这种方法就是同步非阻塞IO);二是采用I/O通知机制
阻塞模型图
非阻塞模型图
2. 多路复用I/O模型
select 线程轮询多个socket状态,只有socket有IO读写事件,才通知用户线程进行IO读写操作。
3. Java NIO
3个关键词: Selector(选择器)、Channel(通道)、Buffer(缓存区)
Selector
Buffer
实操
无
总结
无