
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
有时候排查一些问题,避免不了要看一些Java框架的源码,和外部有网络交互功能的框架,现在基本上都使用了reactor模式。虽然看过很多文章讲解reactor模式及其相关知识,时间一长总是忘,面对源码时,还是一头雾水。所以还是彻底理解它比较好,通过自己实现一个极简socket服务器来理解。一开始用C来实现,到最后用Java实现以从底层彻底理解I/O多路复用、select、epoll、reactor等
到这里就发现问题了,主进程既要负责建立连接,又要轮询已建立的连接以检测这些连接是否有I/O事件,还要读取连接中的I/O数据,这反而比1个连接1个线程模型还要糟糕,因为代码基本回到了串行状态。还是通过read方法,如果read方法返回的是错误码是EAGAIN,那么代表此时该连接上没有I/O事件,如果read方法返回了大于0的数字,说明此连接上有I/O事件,并且主进程已经把I/O部分数据读取到了buf
这篇文章介绍了如何在Java中实现Multi-Reactor模式,基于前文C语言epoll版本的思路。主要内容包括: Java NIO核心组件:Channel、Buffer、Selector,以及Buffer的读写模式和Selector在不同操作系统下的实现(Linux-epoll、Windows-select、Mac-kqueue)。 Selector的wakeup机制:用于跨线程唤醒阻塞的se
到这里就发现问题了,主进程既要负责建立连接,又要轮询已建立的连接以检测这些连接是否有I/O事件,还要读取连接中的I/O数据,这反而比1个连接1个线程模型还要糟糕,因为代码基本回到了串行状态。还是通过read方法,如果read方法返回的是错误码是EAGAIN,那么代表此时该连接上没有I/O事件,如果read方法返回了大于0的数字,说明此连接上有I/O事件,并且主进程已经把I/O部分数据读取到了buf
这篇文章介绍了如何在Java中实现Multi-Reactor模式,基于前文C语言epoll版本的思路。主要内容包括: Java NIO核心组件:Channel、Buffer、Selector,以及Buffer的读写模式和Selector在不同操作系统下的实现(Linux-epoll、Windows-select、Mac-kqueue)。 Selector的wakeup机制:用于跨线程唤醒阻塞的se
背景:我们实际开发中,总有几张和业务相关的大表,这里的大表是指数据量巨大。如用户表、订单表,又或者公司业务中的主表,可能很快这种表的数据就达到了百万、千万、亿级别的规模,并且增长规模一直很快。这种情况下,单表已经满足不了了存储需求了,同时,这么大的数据量,即使搭配合理的索引,数据库查询也是很慢的。这时就需要对这些大表进行分库、分表。例如:user表现在数据增长很快,这时对user库、表。通过部署多
介绍了C语言中通过epoll实现Multi-Reactor 模式,这篇文章用Java实现。有了上一篇博文的知识背景,其实在Java中写起对应的代码时比较顺利的,只需要在Java中找到对应的类即可。
到这里就发现问题了,主进程既要负责建立连接,又要轮询已建立的连接以检测这些连接是否有I/O事件,还要读取连接中的I/O数据,这反而比1个连接1个线程模型还要糟糕,因为代码基本回到了串行状态。还是通过read方法,如果read方法返回的是错误码是EAGAIN,那么代表此时该连接上没有I/O事件,如果read方法返回了大于0的数字,说明此连接上有I/O事件,并且主进程已经把I/O部分数据读取到了buf
到这里就发现问题了,主进程既要负责建立连接,又要轮询已建立的连接以检测这些连接是否有I/O事件,还要读取连接中的I/O数据,这反而比1个连接1个线程模型还要糟糕,因为代码基本回到了串行状态。还是通过read方法,如果read方法返回的是错误码是EAGAIN,那么代表此时该连接上没有I/O事件,如果read方法返回了大于0的数字,说明此连接上有I/O事件,并且主进程已经把I/O部分数据读取到了buf
本文通过实现一个极简socket服务器,深入讲解了reactor模式及相关底层技术。主要内容包括:socket服务器的基本流程(创建、绑定、监听、处理请求),文件描述符与内核三张表的关系(文件描述符表、打开文件表、i-node表),网络字节序转换的重要性,以及backlog参数对连接队列的影响。文章从C语言底层实现出发,逐步解析I/O多路复用、select/epoll等机制,为理解Java框架中的







