diff --git a/docs/notes/Socket.md b/docs/notes/Socket.md index 141d3e63..f30b5b1f 100644 --- a/docs/notes/Socket.md +++ b/docs/notes/Socket.md @@ -37,11 +37,11 @@ Unix 有五种 I/O 模型: ## 阻塞式 I/O -应用进程被阻塞,直到数据复制到应用进程缓冲区中才返回。 +应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。 -应该注意到,在阻塞的过程中,其它程序还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其他程序还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。 +应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。 -下图中,recvfrom 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。 +下图中,recvfrom() 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。 ```c 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)。 -由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率是比较低的。 +由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率比较低。