mirror of
https://github.com/youthlql/JavaYouth.git
synced 2026-03-14 05:43:50 +08:00
纠错与更改所有文章的图床
This commit is contained in:
@@ -1,3 +1,17 @@
|
||||
---
|
||||
title: 计算机网络-总结篇
|
||||
tags:
|
||||
- 计算机网络
|
||||
- 面试
|
||||
categories:
|
||||
- 计算机网络
|
||||
keywords: 计算机网络,计网,面试
|
||||
description: 计算机网络-总结篇,可以用来期末复习,校招面试等。
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/logo.jpg'
|
||||
abbrlink: 3905e6f8
|
||||
date: 2020-04-16 17:21:58
|
||||
---
|
||||
|
||||
|
||||
|
||||
# 备注
|
||||
@@ -177,7 +191,7 @@ https://www.cnblogs.com/felixzh/p/10345929.html
|
||||
|
||||
## 区别+应用场景
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0001.png" width=90%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0001.png" width=90%>
|
||||
|
||||
**总结:**
|
||||
|
||||
@@ -292,7 +306,7 @@ TCP通过三次握手建立可靠连接
|
||||
|
||||
在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0002.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0002.png" width=80%>
|
||||
|
||||
|
||||
|
||||
@@ -819,7 +833,7 @@ proactor: 这有十个字节数据,收好了跟我说一声。
|
||||
|
||||
当用户进程进行recvfrom这个系统调用,内核就开始了IO的第一个阶段:等待数据准备。对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候**内核**就要等待足够的数据到来。而在用户进程这边,整 个进程会被阻塞。当**内核**一直等到数据准备好了,它就会将数据从**内核**中拷贝到用户内存,然后**内核**返回果,用户进程才解除 block的状态,重新运行起来。**所以,blocking IO的特点就是在IO执行的两个阶段都被block了。**
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0003.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0003.png" width=80%>
|
||||
|
||||
<img src="http://images.cnitblog.com/blog/405877/201411/142330286789443.png" width=70%>
|
||||
|
||||
@@ -830,7 +844,7 @@ proactor: 这有十个字节数据,收好了跟我说一声。
|
||||
3. 虽然用户线程每次发起IO请求后可以立即返回,但是为了等到数据,仍需要不断地轮询、重复请求,消耗了大量的CPU的资源。一般很少直接使用这种模型,而是在其他IO模型中使用非阻塞IO这一特性。
|
||||
4. **所以,用户进程第一个阶段不是阻塞的,需要不断的主动询问内核数据好了没有;第二个阶段依然总是阻塞的。**
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0004.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0004.png" width=80%>
|
||||
|
||||
<img src="http://images.cnitblog.com/blog/405877/201411/142332004602984.png" width=70%>
|
||||
|
||||
@@ -842,7 +856,7 @@ proactor: 这有十个字节数据,收好了跟我说一声。
|
||||
2. 它的基本原理就是select /epoll这个函数会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程,正式发起read请求。
|
||||
3. 从流程上来看,使用select函数进行IO请求和同步阻塞模型没有太大的区别,甚至还多了添加监视socket,以及调用select函数的额外操作,效率更差。但是,使用select以后最大的优势是用户可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被激活的socket(也就是数据准备好了的socket),即可达到在同一个线程内同时处理多个IO请求的目的。而在同步阻塞模型中,必须通过多线程的方式才能达到这个目的。
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0005.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0005.png" width=80%>
|
||||
|
||||
|
||||
|
||||
@@ -868,7 +882,7 @@ proactor: 这有十个字节数据,收好了跟我说一声。
|
||||
2. 这个一般用于UDP中,对TCP套接口几乎是没用的,原因是该信号产生得过于频繁,并且该信号的出现并没有告诉我们发生了什么事情
|
||||
3. 信号驱动IO放佛很像异步IO,它的第一阶段不是阻塞的。但是很遗憾,它的数据拷贝阶段(第二阶段),任然是阻塞的。
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0006.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0006.png" width=80%>
|
||||
|
||||
|
||||
|
||||
@@ -879,7 +893,7 @@ proactor: 这有十个字节数据,收好了跟我说一声。
|
||||
3. 而另一方面,从**内核**的角度,当它受到一个异步读之后,首先它会立刻返回,所以不会对用户进程产生任何阻塞。然后,内核会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都 完成之后,**内核**会给用户进程发送一个信号,告诉它read操作完成了,用户线程直接使用即可。 在这整个过程中,进程完全没有被阻塞。
|
||||
4. 异步IO模型使用了Proactor设计模式实现了这一机制。**(具体怎么搞得,看上面的文章链接)**
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lql_img/computer_network/summary/0007.png" width=80%>
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/summary/0007.png" width=80%>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user