NIO中采用了当前比较热的reactor模式,废话不多说,上一个reactor的demo
Selector:
public class Selector { private BlockingQueue<Event> queue = new LinkedBlockingQueue<>(); private Object lock = new Object(); public List<Event> select() { return select(0); } List<Event> select(long timeout) { if (timeout > 0 ) { if (queue.isEmpty()) { synchronized (lock) { if (queue.isEmpty()) { try { lock.wait(timeout); } catch (InterruptedException e) { } } } } } List<Event> list = new ArrayList<>(); queue.drainTo(list); return list; } public void addEvent(Event event) { boolean success = queue.offer(event); if (success) { synchronized (lock) { lock.notify(); } } } }
Dispatcher:
public class Dispatcher { private Map<EventType,EventHandler> eventHandlerMap = new HashMap<>(); Selector selector; public Dispatcher(Selector selector) { super(); this.selector = selector; } public void regisiterHandler(EventType eventType,EventHandler handler) { eventHandlerMap.put(eventType, handler); } public void removeHandler(EventType eventType) { eventHandlerMap.remove(eventType); } public void handle() { dispatch(); } private void dispatch() { while (true) { List<Event> events = selector.select(); for (Event event: events) { EventHandler eventHandler = eventHandlerMap.get(event.type); eventHandler.handle(event); } } } }
Event:
public class Event { public EventType type; public Event(EventType type) { super(); this.type = type; } }
EventType:
public enum EventType { READ,WRITE,ACCEPT,QUIT }
EventHandler:
public interface EventHandler { void handle(Event event); }
public class ReadEventHandler implements EventHandler { @Override public void handle(Event event) { System.out.println("Read event handler"); } }
public class WriteEventHandler implements EventHandler { @Override public void handle(Event event) { System.out.println("write event handler"); } }
Main:
public static void main(String[] args) { final Selector selector = new Selector(); Dispatcher dispatcher = new Dispatcher(selector); dispatcher.regisiterHandler(EventType.READ, new ReadEventHandler()); dispatcher.regisiterHandler(EventType.WRITE, new WriteEventHandler()); for (int i = 0; i<10;i++) { final int j = i; Thread t = new Thread(new Runnable() { @Override public void run() { if (j%2==0) { selector.addEvent(new Event(EventType.READ)); } else { selector.addEvent(new Event(EventType.WRITE)); } } }); t.start(); } dispatcher.handle(); }
简单说明下,reactor必须有一个selector和dispatcher,
selector用于收集事件,dispacher用于将事件分派到不同的handler里去处理,
eventhandler由于具体业务处理的抽象
基于reactor的NIO及redis的单线程模式可见这样的一种编程模式效率并不会比纯异步的低。
普通异步处理:
reactor模式:
相关推荐
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
java nio 作者的ppt。 How to Build a Scalable Multiplexed Server With NIO 文中讲述如何使用java nio来实现高性能的服务器。...2、java nio 和 reactor 的映射关系 3、如果使用java nio 来实现高性能服务器
本篇文章将带你深入理解NIO的源码,揭示其在大数据环境下的应用与优势。 NIO与传统的IO模型(-blocking I/O)相比,主要的区别在于它允许单线程处理多个通道(channels),而无需为每个通道创建一个单独的线程。...
Java NIO——Java NIO——Java NIO
本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是Java语言中传统的输入输出处理方式。它基于流的概念,包括字节流和字符流...
Reactor模式是一种事件驱动的设计模式,主要用于解决高并发场景下的系统设计问题,而Java的NIO(Non-blocking Input/Output,非阻塞I/O)是Java平台提供的一种I/O模型,它支持基于事件的多路复用,为实现Reactor模式...
在深入探讨Java IO与Java NIO之间的区别之前,我们先简单回顾一下这两种I/O模型的基本概念。 #### 1. Java IO(Blocking IO) Java IO,也称为传统的阻塞式IO或同步阻塞式IO,是Java早期版本中的主要I/O处理方式。...
NIO 相比标准 IO,有更多的优势,特别是在高并发连接的情况下。在 NIO 中,单线程可以管理多个通道,而标准 IO 则需要多个线程来管理多个连接。这样,NIO 可以更好地处理高并发连接,减少资源占用和提高性能。 5. ...
Socket NIO 单 Reactor 模式是一种在 Java 中实现高性能网络编程的技术,它结合了非阻塞I/O(New I/O,即NIO)和Reactor设计模式。本示例代码旨在帮助开发者理解如何使用Java NIO和Reactor模式构建网络服务。尽管...
Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
总结来说,Java NIO提供了一种更高效、更适合处理并发的IO模型,尤其在服务器端开发中,如高并发的网络应用,NIO的优势更为明显。理解和掌握Java IO与NIO的使用,对于提升Java应用程序的性能和可扩展性至关重要。
Java IO和NIO提供了两种不同的I/O处理方式,各有优势和适用场景。IO适用于简单的I/O操作,而NIO则适合于需要高性能和高并发的应用。了解这两种I/O处理方式的区别和特点,可以帮助开发者根据具体的应用需求选择合适的...
在IT领域,输入/输出(IO)和文件操作是编程中的基础部分,而NIO(New Input/Output)则是Java平台提供的一种高级IO机制,它为开发者提供了更强大的数据传输能力。这篇博客“IO、文件、NIO最佳阅读资料与实践”可能...
使用 io和nio 各个方式进行文件拷贝; 使用nio+byteBuffer 实现按行读取文件(大文件),在window/linux/macOS上均测试通过,对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...
标题《Scalable IO in Java》和描述表明本文档讨论...通过理解Reactor模式以及如何在Java中通过NIO API实现这一模式,开发者可以构建出能够处理大量并发连接的应用程序,并达到高可伸缩性、高可用性以及高性能的目标。
java io nio nio2 java io的百科全书 mobi格式 需要kindle 软件