zoukankan      html  css  js  c++  java
  • 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模型进行轮询检查这个状态,

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

  • 相关阅读:
    web 安全问题(二):XSS攻击
    web 安全问题(一):CSRF 攻击
    关于阅读源码
    vue 阅读一【待完结】
    【转】服务器添加新用户用ssh-key 登录,并禁用root用户 密码登录
    sass & compass 实战录
    浏览器兼容性总结
    常用的一个cookie 对象,还有path 兼容性问题
    css margin塌陷问题
    markdown 语法简要备忘
  • 原文地址:https://www.cnblogs.com/wangpin/p/6986458.html
Copyright © 2011-2022 走看看