侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

IO

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 171 阅读 / 363 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
/ 后端 / JAVA / IO
Socket
ServerSocket


BIO 阻塞读写监听,阻塞连接监听,单独线程读写
NIO IO多路复用,epoll, 单线程阻塞消息监听和连接监听,单独线程读写
while true { //伪代码
	events = takeEvents(fds) // 获取事件,如果没有事件,线程就休眠 
	for event in events { 
		if event.isAcceptable { 
			doAccept() // 新链接来了 
		} elif event.isReadable { 
			request = doRead() // 读消息
			if request.isComplete() {
				doProcess() 
			} 
		} elif event.isWriteable {
				doWrite() // 写消息
		}
	}
}
AIO 基于事件IO,拒绝循环。
Reactor反应器模式设计
反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。简单说,就是如何处理多个客户端的并发请求的解决模式。


Netty 是建立在NIO基础之上
如果不用netty,使用原生JDK的话,有如下问题:
1、API复杂
2、对多线程很熟悉:因为NIO涉及到Reactor模式
3、高可用的话:需要出路断连重连、半包读写、失败缓存等问题
4、JDK NIO的bug
0

评论区