• Linux网络I/O模型简介


    一、I/O基础入门

    java1.4之前的早期版本,java对I/O的支持并不完善,开发人员在开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要问题如下。

    1、没用数据缓冲区,I/O性能存在问题;

    2、没有C或者C++中的Channel概念,只有输入和输出流;

    3、同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞;

    4、支持字符集有限,硬件可移植性不好。

    二、Linux网络I/O模型简介

    Linux的内核讲所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。

    而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。

    根据unix网络编程对I/O模型的分类,UNIX提供了5种I/O模型。

    1、阻塞IO模型:默认情况下,所有文件操作都是阻塞的。在进程空间中调用recvfrom,其系统调用知道数据包到达且被复制到应用进程的缓冲区或者发生错误时才返回,

    在此期间一直会等待,进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞的,因此被称为阻塞I/O模型。

    2、非阻塞IO模型:recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,一般都对非阻塞IO模型进行轮询检查这个状态,

    看内核是不是有数据到来。

  • 相关阅读:
    jenkins+maven+svn的自动化部署
    python+selenium遇到鼠标悬停不成功可以使用js进行操作
    robot framework环境搭建
    selenium+python定位元素方法
    selenium+python元素操作
    selenium+python等待时间
    selenium+python浏览器窗口的切换
    jmeter学习(七)连接mysql 数据库
    jmeter学习(六)集合点和关联
    jmeter学习(五)参数化
  • 原文地址:https://www.cnblogs.com/wangpin/p/6986458.html
Copyright © 2020-2023  润新知