File tree 1 file changed +6
-1
lines changed
1 file changed +6
-1
lines changed Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ Unix 下有5种可用的 I/O 模型,如下:
8
8
* 信号驱动 I/O
9
9
* 异步I/O
10
10
11
- 对于一个套接口上的输入操作,第一步通常涉及等待数据从网络中到达。 当所等待分组到达时,它被拷贝到内核中的某个缓冲区。第二步就是把数据从内核缓冲区拷贝到应用进程缓冲区。
11
+ 对于一个套接口上的读写操作,其实分成了两个步骤:发起IO请求和实际的IO操作。第一步通常涉及等待数据从网络中到达, 当所等待分组到达时,它被拷贝到内核中的某个缓冲区。第二步就是把数据从内核缓冲区拷贝到应用进程缓冲区。
12
12
13
13
## 阻塞式 I/O
14
14
@@ -77,6 +77,11 @@ POSIX关于同步、异步的定义如下:
77
77
1 . ` 同步I/O操作 ` (synchronous I/O operation)导致请求进程阻塞,直到I/O操作完成。
78
78
2 . ` 异步I/O操作 ` (asynchronous I/O operation)不导致请求进程阻塞。
79
79
80
+ 可以这样理解:
81
+
82
+ * 阻塞IO和非阻塞IO的区别在于第一步:发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO;如果不阻塞,那么就是非阻塞IO
83
+ * 同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。
84
+
80
85
根据上述定义,前4种模型——阻塞I/O模型、非阻塞I/O模型、I/O复用模型和信号驱动I/O模型都是同步I/O模型,因为其中真正的I/O操作(recvfrom)将阻塞进程。只有异步I/O模型与POSIX定义的异步I/O相匹配。
81
86
82
87
关于同步/异步、阻塞/非阻塞可以这样理解,拿小明下载文件打个比方:
You can’t perform that action at this time.
0 commit comments