V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Kontinue
V2EX  ›  程序员

请教一个网络通信的概念问题

  •  
  •   Kontinue · 2021-01-08 11:08:47 +08:00 · 2103 次点击
    这是一个创建于 1450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在博客上考看到两个概念:

    一个是 linux 级别的 io 模型,比如同步阻塞 I/O 、同步非阻塞 I/O 、多路复用 I/O 、信号驱动 I/O 。

    一个是程序语言层面的,比如 Java 中的 BIO 、NIO 、AIO 。

    我想知道的是这两者之间的联系是什么?是不是 linux io 模型仅仅是一个理论的模型,具体的需要看程序语言是如实现的?还是说是一种依赖关系,比如 java 的 NIO 在 linux 上执行依赖于 os 的多路复用 I/O 模型这样?

    12 条回复    2021-01-11 17:07:18 +08:00
    luckyrayyy
        1
    luckyrayyy  
       2021-01-08 11:16:09 +08:00
    依赖关系,最终都要依赖操作系统的实现,比如 AIO Linux 上就不成熟,Windows 才有真正的 AIO,因此语言层面上支持也白搭。
    这是我的理解,不保证对噢😯
    misaka19000
        2
    misaka19000  
       2021-01-08 11:18:41 +08:00
    Java 是一种语言的 API,是对操作系统的 IO 的封装,本质上还是调用了 OS 的接口
    opengps
        3
    opengps  
       2021-01-08 11:20:32 +08:00
    每个地方都有 io,所以 io 这个词很宽泛。有些地方无法多路 IO,比如单个硬盘文件的操作,数据库能多连接实际上是程序做了高效分工共同了一个文件流。
    物理上:硬盘有吞吐,网络有吞吐,内存也有吞吐
    软件上:一个集合变量也有吞吐(这种往往跟大小和内存 io 有直接关系)
    togou
        4
    togou  
       2021-01-08 12:07:20 +08:00
    最终还是看 os Java 的 nio 只不过是利用其自己的平台特性 封装成异步 io
    carlclone
        5
    carlclone  
       2021-01-08 12:21:15 +08:00 via Android
    我也有一个问题,像 epoll 已经减少了大部分的 io 阻塞,那异步 io 解决的是哪里的阻塞
    vk42
        6
    vk42  
       2021-01-08 12:26:40 +08:00
    @carlclone epoll 哪里减少阻塞了?只是减少了轮询的代价。AIO 完全是不同的概念……
    carlclone
        7
    carlclone  
       2021-01-08 12:42:09 +08:00 via Android
    @vk42 明白你说的,我说的是 epoll 多 socket 的时候不会阻塞在某个未就绪的 socket 上,
    carlclone
        8
    carlclone  
       2021-01-08 12:48:02 +08:00 via Android
    @vk42 刚刚查了一下异步 io (在整个操作(包括将数据从内核拷贝到用户空间)完成后才通知用户进程) ,就是说即使 epoll 通知 socket 就绪了,去读 socket 时的数据拷贝过程还是阻塞的,所以异步 io 减少的是拷贝过程的阻塞,这样理解对吗
    haosamax
        9
    haosamax  
       2021-01-08 14:15:18 +08:00
    NIO 还是需要一个线程去轮询 IO 状态,AIO 有数据操作系统通过回调机制处理
    cheng6563
        10
    cheng6563  
       2021-01-08 14:41:01 +08:00
    操作系统基本只提供 c 的 Api 。
    你去看 Java 里的源码,稍微跟一下就能跟到个 native 方法,比如 FileInputStream,其实就是进入 c 的世界调用操作系统的 API 去了。
    xcstream
        11
    xcstream  
       2021-01-08 18:48:35 +08:00
    不知道取什么名字就叫 io
    比如 google io 大会
    Firxiao
        12
    Firxiao  
       2021-01-11 17:07:18 +08:00
    可以了解下 Linux 操作系统的结构, 软件是一层一层调用系统内核的, 所以语言越接近内核(硬件),效率越高.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.