`
wuhuajun
  • 浏览: 93839 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

NIO 终结者

    博客分类:
  • java
 
阅读更多

传统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就成了可能。

 

非阻塞让一切变得可能。酷   马上就是十一假期了。。。。。。。。。。。。。。。。。大家节日快乐

 

  • 大小: 241 KB
0
2
分享到:
评论

相关推荐

    用java实现的仿p2p终结者软件

    【Java实现的仿P2P终结者软件】 在IT领域,P2P(peer-to-peer)网络技术被广泛应用于文件共享、流媒体传输等场景。然而,这种技术也可能导致网络带宽被过度占用,影响其他用户的网络体验。"P2P终结者"是一款网络...

    java与j2ee面试试题总结(终结版)

    这份"java与j2ee面试试题总结(终结版)"包含了广泛的知识点,旨在帮助求职者准备面试,同时也为学习者提供了深入理解这两项技术的窗口。 首先,让我们聚焦于Java。Java是一种面向对象的编程语言,以其“一次编写,...

    ITAT(java)历届试题答案(均调试通过)

    8. **IO与NIO**:Java的New IO(NIO)提供了非阻塞I/O,适合高并发场景。 9. **反射**:允许程序在运行时检查类的信息,创建和访问类的对象。 10. **JVM内存管理**:理解堆内存、栈内存、方法区等,以及垃圾回收...

    ITAT(java)历届试题答案(均调试通过)

    10. **设计模式**:了解常见的设计模式,如单例、工厂、观察者、装饰者、适配器等,它们是解决特定问题的成熟解决方案。 11. **Java EE技术**:如Servlet、JSP、JDBC、EJB、Spring、Hibernate等,对于Web开发至关...

    java开发面试题100M文档

    -finalize()方法:理解对象的终结过程及 finalize() 方法的角色。 3. **Java集合框架**: - List、Set、Queue接口及其实现类:ArrayList、LinkedList、HashSet、HashMap等的特性与使用场景。 - 泛型:理解泛型...

    java笔试题大集合(含答案)

    这份资料集涵盖了各种类型的Java基础知识和进阶概念,旨在帮助求职者准备面试,提升自身的技术实力。下面,我们将深入探讨其中可能包含的一些核心知识点。 1. **Java基础** - **变量与数据类型**:包括基本数据...

    JAVA-内存模型.docx

    - **线程终结规则**:如果线程B观察到线程A终止,则线程A的所有操作都发生在B观察到A终止之前。 通过以上规则,Java内存模型确保了在多线程环境下程序的一致性和正确性。理解这些概念对于开发高效、稳定的Java应用...

    Java面试及简历相关,java笔试和面试题

    - 对象的生命周期:创建、使用、可达性分析、垃圾收集、对象终结。 4. **多线程**: - 创建线程的方式:Thread类、Runnable接口、Callable与FutureTask。 - 线程同步:synchronized关键字、wait()、notify()、...

    Java面试题集(最全版).rar

    以上只是部分Java面试题集中可能涉及的关键知识点,实际文档可能还包括了反射、注解、模块化系统、NIO、AIO等更多高级主题。对于求职者来说,全面理解和掌握这些知识点,将极大地提升在Java面试中的竞争力。

Global site tag (gtag.js) - Google Analytics