Java中5种IO模型分别是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计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的状态,重新运行起来。

