传统IO请求等待主要在1.等待数据就绪 2.将数据从内核缓冲区到用户进程缓冲区互相拷贝过程
传统一连接一线程 请求多的时候服务端需要开辟很多线程消耗资源 最主要的这些消耗并不是都消耗在业务逻辑的执行上面 好多在io等待上面 (通过visualvm监控服务后台可以看出很多都是wait状态) 这个等待的过程是阻塞的,直到完成为止。
那么是不是可以将这些等待利用起来 让一个线程去等呢?如果有了这样一个线程去等待 那么大量请求过来是不是服务端就不需要开辟那么多线程呢?
NIO出现主要就是为了解决这件事情的。
NIO+REACTOR模式 基于事件机制: 这个时候读写就不再是阻塞的了 之前每个线程的操作都是固定的 读 执行 写 线程按照这个顺序去做事 读和写都必须等,等到真正的数据到来 可读取 可写入为止。时间就消耗在这里。
NIO有个专门的线程去等可读取可写入 等到时机到了 通过事件通知你去做事情 这样你的线程就没有去等待,都是用来的执行的,利用率非常高,利用率高 相对线程数可以少了。
具体如何通知:
最常见的
1.在启动的时候注册 Connect事件处理器到REACTOR
2.Connect连接事件来了 REACTOR调用到我的Connect执行处理器里面 在里面我可以注册个读取事件等待读事件发生。
3.可读时间发生后 REACTOR会调用读取处理器 处理完读取业务逻辑注册写事件
4.写事件发生了 REACTOR会调用写处理器 写入流。
这个过程中所有IO的等待都在REACTOR里面 如果REACTOR是一个线程的话 那么就消耗一个线程而已。
REACTOR读写具体发生了什么事情:
REACTOR读写时非阻塞的不能读取或者写入的时候可以去监视其他的IO这样单线程 扫描所有的IO就成了可能。
非阻塞让一切变得可能。 马上就是十一假期了。。。。。。。。。。。。。。。。。大家节日快乐
相关推荐
【Java实现的仿P2P终结者软件】 在IT领域,P2P(peer-to-peer)网络技术被广泛应用于文件共享、流媒体传输等场景。然而,这种技术也可能导致网络带宽被过度占用,影响其他用户的网络体验。"P2P终结者"是一款网络...
这份"java与j2ee面试试题总结(终结版)"包含了广泛的知识点,旨在帮助求职者准备面试,同时也为学习者提供了深入理解这两项技术的窗口。 首先,让我们聚焦于Java。Java是一种面向对象的编程语言,以其“一次编写,...
8. **IO与NIO**:Java的New IO(NIO)提供了非阻塞I/O,适合高并发场景。 9. **反射**:允许程序在运行时检查类的信息,创建和访问类的对象。 10. **JVM内存管理**:理解堆内存、栈内存、方法区等,以及垃圾回收...
10. **设计模式**:了解常见的设计模式,如单例、工厂、观察者、装饰者、适配器等,它们是解决特定问题的成熟解决方案。 11. **Java EE技术**:如Servlet、JSP、JDBC、EJB、Spring、Hibernate等,对于Web开发至关...
-finalize()方法:理解对象的终结过程及 finalize() 方法的角色。 3. **Java集合框架**: - List、Set、Queue接口及其实现类:ArrayList、LinkedList、HashSet、HashMap等的特性与使用场景。 - 泛型:理解泛型...
这份资料集涵盖了各种类型的Java基础知识和进阶概念,旨在帮助求职者准备面试,提升自身的技术实力。下面,我们将深入探讨其中可能包含的一些核心知识点。 1. **Java基础** - **变量与数据类型**:包括基本数据...
- **线程终结规则**:如果线程B观察到线程A终止,则线程A的所有操作都发生在B观察到A终止之前。 通过以上规则,Java内存模型确保了在多线程环境下程序的一致性和正确性。理解这些概念对于开发高效、稳定的Java应用...
- 对象的生命周期:创建、使用、可达性分析、垃圾收集、对象终结。 4. **多线程**: - 创建线程的方式:Thread类、Runnable接口、Callable与FutureTask。 - 线程同步:synchronized关键字、wait()、notify()、...
以上只是部分Java面试题集中可能涉及的关键知识点,实际文档可能还包括了反射、注解、模块化系统、NIO、AIO等更多高级主题。对于求职者来说,全面理解和掌握这些知识点,将极大地提升在Java面试中的竞争力。