Java中5种IO模型分别是什么?

2026-05-17 11:011阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1923个文字,预计阅读时间需要8分钟。

每日一句:人的痛苦会把自身折磨到多深呢?每日一句:You cannot swim for new horizons until you have courage to lose sight of the shore. 除了有勇气离开岸边,否则你永远游不到彼岸。概念:IO是主存和外存。

每日一句

人的痛苦会把自己折磨到多深呢?

每日一句

You cannot swim for new horizons until you have courage to lose sight of the shore.
除非有勇气离开岸边,否则你永远游不到彼岸。

概念

IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。

以下是5种类Unix下可用的I/O模型

1.阻塞式I/O:BlockingIO

2.非阻塞式I/O:nonblockingIO

3.I/O复用(Select,pollepoll):IOmultiplexing

4.信号驱动式I/O(SIGIO):signaldrivenIO

5.异步I/O(posix的 aio系列函数):asynchromousIO

Blocking IO

在Linux中,默认情况下所有的socket都是Blocking,一个典型的读操作流程大概是这样:

1.通常涉及等待数据从网络到达。当所有等待数据到达时,它被复制到内核中的某个缓冲区

2.把数据从内核缓冲区复制到应用程序缓冲区

当用户进程调用了 recvfrom这个系统调用, kernel就开始了IO的第一个阶段:准备数据。对于networkIO来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包)。这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。

阅读全文

本文共计1923个文字,预计阅读时间需要8分钟。

每日一句:人的痛苦会把自身折磨到多深呢?每日一句:You cannot swim for new horizons until you have courage to lose sight of the shore. 除了有勇气离开岸边,否则你永远游不到彼岸。概念:IO是主存和外存。

每日一句

人的痛苦会把自己折磨到多深呢?

每日一句

You cannot swim for new horizons until you have courage to lose sight of the shore.
除非有勇气离开岸边,否则你永远游不到彼岸。

概念

IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。

以下是5种类Unix下可用的I/O模型

1.阻塞式I/O:BlockingIO

2.非阻塞式I/O:nonblockingIO

3.I/O复用(Select,pollepoll):IOmultiplexing

4.信号驱动式I/O(SIGIO):signaldrivenIO

5.异步I/O(posix的 aio系列函数):asynchromousIO

Blocking IO

在Linux中,默认情况下所有的socket都是Blocking,一个典型的读操作流程大概是这样:

1.通常涉及等待数据从网络到达。当所有等待数据到达时,它被复制到内核中的某个缓冲区

2.把数据从内核缓冲区复制到应用程序缓冲区

当用户进程调用了 recvfrom这个系统调用, kernel就开始了IO的第一个阶段:准备数据。对于networkIO来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包)。这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。

阅读全文