美文网首页
JDK IO模型实现

JDK IO模型实现

作者: edolovee | 来源:发表于2018-03-25 23:15 被阅读0次

简介

IO模型是网络编程中十分重要,却也是容易搞混的部分,一般IO模型都从两个角度来划分,分别是同步异步以及阻塞非阻塞,有同步阻塞IO、异步非阻塞。同步还是异步取决于消息通知的机制,而阻塞还是非阻塞取决于线程状态是否挂起

Linux IO模型

  1. 同步阻塞(BIO)
    用户进程调用了recv系统调用后,从内核准备数据到准备好从内核空间复制到用户空间整个期间用户进程都是阻塞的
  2. 同步非阻塞(NIO)
    用户进程调用read操作,如果数据没有准备好则返回错误码,数据准备好返回准备好信号,所以在数据准备好之前用户进程需要轮询内核状态,但是这期间不是阻塞的,直到内核数据准备好之后,用户进程调用recvfrom系统调用将数据从内核复制到用户空间,当然数据复制的过程仍然是阻塞的
  3. IO 多路复用
    同步非阻塞的方式不断的轮询,十分浪费cpu,一个socket还好如果太多则完全顶不住,所以引入了单线程可以轮询多个socket的状态,其中任何一个socket数据准备好,系统调用就返回(select、poll、epoll),这时才进行io操作调用recvfrom。select与epoll的区别在于select轮询n个socket的状态时间复杂度为o(n),而epoll实现了当某个socket有事件发生后会通知用户进程,时间复杂度降到了o(1)
  4. 异步非阻塞(信号驱动)
    用户进程进行aio_read系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,等到socket数据准备好了,内核直接复制数据给用户进程,然后从内核通知给用户进程。IO两个阶段,进程都是非阻塞的。(libevent、libev、libuv)

JDK BIO实现

jdk的bio使用的同步阻塞模型

JDK NIO 实现

jdk的nio使用的IO多路复用模型,在linux2.6版本之后使用的epoll,之前的是poll,在mac中使用的kqueue

JDK AIO 实现

jdk的aio使用的异步非阻塞模型,具体实现待定

Netty IO 模型

netty的io模型使用的jdk的nio实现,每个nioeventloop都会启动一个jdk的selector,每个selector底层使用的epoll实现(linux2.6之后),同时netty将io任务以及定时任务通过一个io radio的参数配置,使得同一个线程分别可以处理io以及定时的任务。
另外,netty作为服务端使用时,启动了两个线程池分别为bossgroup何workergroup,其中的每个线程就是nioeventloop实现的,bossgroup负责acceptor的工作,workergroup负责io业务处理

相关文章

  • Redis客户端Lettuce源码【一】Jedis vs Let

    @[toc] 基本实现对比 JedisLettuce支持JDK版本JDK6+JDK8+IO模型BIONIO(Net...

  • JDK IO模型实现

    简介 IO模型是网络编程中十分重要,却也是容易搞混的部分,一般IO模型都从两个角度来划分,分别是同步异步以及阻塞非...

  • 高性能IO模型与线程模型

    IO模型 linux系统实现IO通信,主要是依靠几个系统调用函数实现的: recvFrom实现非阻塞和阻塞IO,该...

  • IO 模型实现

    基本 IO 模型 IO 模型 传统的 CS 网络模型 虚线标识网络连接的建立,实线表示链接建立后的请求/响应。 多...

  • tornado源码阅读1 - 底层IOLoop

    ** 目录 ** 介绍 [IO 模型](#io 模型) 实现主体类结构主循环定时器处理 结束语 介绍 Tornad...

  • Netty浅析

    IO模型 IO多路复用模式:Reactor、Proactor NIO实现的是Reactor模式。通过select、...

  • 1.Nette入门第一章——IO演进

    1. IO 基础 1.1. linux网络IO模型 阻塞IO模型 非阻塞IO模型 IO多路复用模型(NIO) 信...

  • 细谈Select,Poll,Epoll

    阻塞 io 模型 blocking IO非阻塞 io 模型 nonblocking IOio多路复用模型 IO m...

  • 2.五种IO模型

    0.IO介绍1.阻塞IO模型2.非阻塞IO模型3.IO多路复用模型4.信号驱动IO模型5.异步IO模型6.五种IO...

  • NIO学习笔记

    NIO 操作系统背景知识 unix提供了5中io模型,其中java的底层实现依赖的是操作系统的io复用模型。lin...

网友评论

      本文标题:JDK IO模型实现

      本文链接:https://www.haomeiwen.com/subject/zkihcftx.html