auto commit
This commit is contained in:
parent
7aa1d640f2
commit
6687ef8313
@ -37,11 +37,11 @@ Unix 有五种 I/O 模型:
|
|||||||
|
|
||||||
## 阻塞式 I/O
|
## 阻塞式 I/O
|
||||||
|
|
||||||
应用进程被阻塞,直到数据复制到应用进程缓冲区中才返回。
|
应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。
|
||||||
|
|
||||||
应该注意到,在阻塞的过程中,其它程序还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其他程序还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
|
应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
|
||||||
|
|
||||||
下图中,recvfrom 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。
|
下图中,recvfrom() 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。
|
||||||
|
|
||||||
```c
|
```c
|
||||||
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
|
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
|
||||||
@ -53,7 +53,7 @@ ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *
|
|||||||
|
|
||||||
应用进程执行系统调用之后,内核返回一个错误码。应用进程可以继续执行,但是需要不断的执行系统调用来获知 I/O 是否完成,这种方式称为轮询(polling)。
|
应用进程执行系统调用之后,内核返回一个错误码。应用进程可以继续执行,但是需要不断的执行系统调用来获知 I/O 是否完成,这种方式称为轮询(polling)。
|
||||||
|
|
||||||
由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率是比较低的。
|
由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率比较低。
|
||||||
|
|
||||||
<div align="center"> <img src="pics/1492929000361_5.png"/> </div><br>
|
<div align="center"> <img src="pics/1492929000361_5.png"/> </div><br>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user