zoukankan      html  css  js  c++  java
  • JAVA——IO模型分类

    一、IO模型分类
    1. 阻塞IO模型:
      a. 读写过程会出现阻塞现象
      b. 数据没有就绪,用户线程会一直处于阻塞状态,一直读不到数据,造成线程浪费
    2. 非阻塞IO模型

      a. While 去read()数据,立即返回结果,数据没有准备好就报错,继续循环read,直到数据准备好,会一直占有cpu去read
    3. 多路复用IO模型(使用比较多)
      a. 有一个线程不断去轮询多个socket状态,当socket有读写事件,才调用IO读写操作
      b. 通过一个线程管理多个socket,当socket有读写事件发生才会占用资源进行实际读写操作,并且对达到事件逐一响应
      c. 适合连接数多的情况
      d. 轮询通过内核进行,效率要比用户线程轮询高得多
      e. 事件响应体很大,会导致后续事件处理慢和新增时间轮询
    4. 信号驱动IO模型
      a. IO请求--》注册信号函数---》内核数据就绪,发送信号给用户线程--》收到信号,进行实际IO操作
    5. 异步IO模型(最理想的IO模型)
      a. 内核等待数据准备完成,然后将数据copy到线程上,发送信号告知线程,数据可以直接使用了。
      b. 与信号驱动IO操作不同的是,发送的信号是告知数据已经可以直接使用,信号驱动时告知线程开始进行IO操作。
      c. 注意:需要操作系统底层支持

  • 相关阅读:
    每天一个css text-indent
    每天一个css word-break word-wrap white-space
    [转载]CentOS+nginx+uwsgi+Python+django 环境搭建
    【转】django使用model创建数据库表使用的字段
    Django对mysql操作
    mysql增删改查
    mysql用户管理
    centos7启动mysql
    centos安装python3
    [转载]python学习目录(转至袁先生的博客)
  • 原文地址:https://www.cnblogs.com/big-data-hins/p/13377492.html
Copyright © 2011-2022 走看看