• Netty NIO基础


    一、NIO的三大组件

    1.1 Channel

    常见的Channel有:

    • FileChannel -- 文件传输通道
    • DatagramChannel -- UDP数据传输通道
    • SocketChannel -- TCP数据传输通道(客户端,服务器端通用)
    • ServerSocketChannel -- TCP数据传输通道(专用于服务器端)

    1.2 Buffer

    常见的Buffer:

    只有ByteBuffer最常用,是一个抽象类。实现类有三个,如下图所示

    1.3 Selector

    服务器设计 - 多线程

    形象解释:将服务器想象是个饭店,socket是一个客人,thread是一个服务员。每来一个客人,就要安排一个服务员跟着。

    内存占用高:每维护一个线程,都要消耗内存

    线程上下文切换成本高:CPU如果只有16核,那最多只能有16个线程在跑。其余线程就搞挂起,保存下该线程的运行情况。等CPU时间片轮到它,再load上下文回去。

    服务器设计 - 线程池

    形象解释:将服务器想象是个饭店,socket是一个客人,thread是一个服务员。在阻塞模式下,一个客人来了,哪怕这个客人啥都不干,一个服务员就要干等在那里,不能处理其他客人的请求。。。

    老式服务器大多此设计,处理HTTP 请求

    服务器设计 - selector

    形象解释:将服务器想象是个饭店,channel是一个客人,thread是一个服务员。selector可以监视多个客人的动作。一旦哪个客人有动作(要和服务器交互),selector就会感知到,通知服务员thread来处理。

    豁然开朗,之前以为非阻塞的实现是因为selector,现在才知道selector的为了让非阻塞变成更好:

    • 无事件时,阻塞
    • 有事件时,非阻塞

       

  • 相关阅读:
    Frameset 框架
    FHS 文件层次标准
    history 命令
    QT基础走起
    Android中导入jar包v4的错误
    Android工具Eclipse点击卡死或者无响应情况
    让程序飞起来
    Android中报错
    【2019.9.23】NOIP2017 practice exam
    【技巧】时间复杂度
  • 原文地址:https://www.cnblogs.com/frankcui/p/16585841.html
Copyright © 2020-2023  润新知