网络编程 - 同步/异步 & 阻塞/非阻塞 - 学习/实践

1.应用场景

主要用于弄清楚网络编程中的同步/异步 & 阻塞/非阻塞。

2.学习/操作

1.文档阅读

19 | 单服务器高性能模式:Reactor与Proactor-极客时间

高性能网络编程中的线程模型看完这篇就会了! - 知乎

https://qiuyadongsite.github.io/2019/04/11/framework4-highConcurrent-31/

网络/Network - 网络编程 - 高性能 - 单服务器高性能模式[网络模型]及性能对比 - 学习/实践

操作系统/OS - I/O - 学习/实践_穿素白衫的少年的博客-CSDN博客

网路/Network - 网络编程 - 为什么网络 I/O 会被阻塞?_穿素白衫的少年的博客-CSDN博客

2.整理输出

开始之前,先看下,服务端处理网络请求流程图

2.1 网友评论收集

Note: 这里只是做参考,因为这里只是他们的看法,通常不是很准确。

林:

IO操作分两个阶段
1、等待数据准备好(读到内核缓存)
2、将数据从内核读到用户空间(进程空间)
一般来说1花费的时间远远大于2。
1上阻塞, 2上也阻塞: 同步阻塞IO
1上非阻塞, 2阻塞: 同步非阻塞IO,这讲说的Reactor就是这种模型 
1上非阻塞, 2上非阻塞: 异步非阻塞IO,这讲说的Proactor模型就是这种模型 

慕士塔格: 意思就是内核空间,我们用阻塞,非阻塞描述;用户空间我们用同步,非同步描述?

狮锅艺 > 慕士塔格:我的理解是这样的:同步/异步关注的是消息通信机制,也就是当前进程调用返回后有没有拿到结果。阻塞/非阻塞关注的是程序在等待调用结果时的状态,也就是说当前线程/进程发起调用后是否要拿到结果才返回。

林:

Reactor与Proactor能不能这样打个比方:

1、假如我们去饭店点餐,饭店人很多,如果我们付了钱后站在收银台等着饭端上来我们才离开,这就成了同步阻塞了。

2、如果我们付了钱后给你一个号就可以离开,饭好了老板会叫号,你过来取。这就是Reactor模型。

3、如果我们付了钱后给我一个号就可以坐到坐位上该干啥干啥,饭好了老板会把饭端上来送给你。这就是Proactor模型了。

作者回复: 太形象了???

整理汇总

I/O 模型的基本认识

介绍操作系统的 I/O 模型之前,先了解一下几个概念:

2.2 同步/异步

同步处理与异步处理

1)同步处理是指被调用方得到最终结果之后才返回给调用方;

2)异步处理是指被调用方先返回应答,然后再计算调用结果,计算完最终结果后再通知并返回给调用方。

2.3  阻塞/非阻塞

阻塞调用与非阻塞调用

1)阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回;

2)非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

两者的最大区别在于被调用方在收到请求到返回结果之前的这段时间内,调用方是否一直在等待。

阻塞是指调用方一直在等待而且别的事情什么都不做;非阻塞是指调用方先去忙别的事情。

2.4 阻塞、非阻塞和同步、异步的区别

阻塞、非阻塞和同步、异步其实针对的对象是不一样的:

1)阻塞、非阻塞的讨论对象是调用者;

2)同步、异步的讨论对象是被调用者。

recvfrom 函数:

recvfrom 函数(经 Socket 接收数据),这里把它视为系统调用。

一个输入操作通常包括两个不同的阶段:

1)等待数据准备好;// 数据最先到网卡[缓存区],然后从网卡复制到内存缓存区 [内存-->内存]

2)从内核向进程复制数据。// 将数据从核心缓存区复制到用户进程缓存区 [内存-->内存]

对于一个套接字/Socket上的输入操作:

第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被复制到内核中的某个缓冲区。

第二步就是把数据从内核缓冲区复制到应用进程缓冲区。

实际应用程序在系统调用完成上面的 2 步操作时,调用方式的阻塞、非阻塞,操作系统在处理应用程序请求时,处理方式的同步、异步处理的不同,可以分为 5 种 I/O 模型(下面的章节将逐个展开介绍)。

阻塞式 I/O 模型(blocking I/O)、

非阻塞式 I/O 模型(non-blocking I/O)、

I/O 复用模型(I/O multiplexing)、

信号驱动式 I/O 模型(signal-driven I/O)、

异步 I/O 模型(即AIO,全称asynchronous I/O)

网络编程中的I/O模型

后续补充

...

3.问题/补充

TBD

4.参考

参见上面文档列表

后续补充

...


版权声明:本文为william_n原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。