Socket、IO模型、NIO

534 阅读1分钟

Socket:

  • 具有管道文件的性质,类似队列、先进先出

  • 具有文件描述符

  • 编程接口

IO多路复用:

  • 单个线程处理多个Socket
  • 核心问题:内核分发消息
  • select模型:线程维护一个 Socket FD 的列表
  • epoll模型:内核维护一个高效的二叉搜索树

Blocking IO(BIO):

  • 操作会阻塞线程
  • 利用cpu中断,阻塞的线程进入休眠,将执行权限交给其他线程
  • 优点:1.阻塞时不会占用系统资源;2.程序好理解
  • 缺点:1.高并发场景需要较高的线程数量(资源占用);2.线程切换有成本
  • 适用范围:一般的高并发场景也可以考虑,并行量特别大的场景,如聊天除外

Non-Blocking IO(NIO):

  • 操作不会阻塞线程,读不到就返回null
  • 原理:由专门的数据结构负责统计发生的I/O,再允许程序监听变更

Asynchronous IO(AIO):

  • 异步编程(基于Future)
  • 原理:利用线程池技术、协程技术,调度所有Future的计算,通常结合epoll和directmemory技术

N(new)IO:

  • NIO的Channel设计

  • DirectMapping

    • 本质是堆外的缓冲区

    • 优化点:减少一次拷贝