用于缓冲区的数据结构

Data structure used for a buffer

我最近参加了一次开发人员面试,被问到以下问题: 我有一台可以处理 20 个请求的服务器。哪种数据结构用于对此建模?如果请求超过 20 个会怎样?即,如果缓冲区溢出,你会怎么做? 我不是来自 CS 背景。我正在从不同的领域过渡。我在编程和 DSA 方面自学。所以我想知道这些问题的答案。提前致谢!

关于可以同时处理 20 个请求的服务器:

你的问题表明你还没有以合理的方式思考它,并且可能离理解它的工作原理还很远。没问题——这只是意味着您要学的东西可能比您预期的要多。

为了帮助你,我会把正确答案写给你,你可以 google 填写完整的术语:

当客户端尝试连接到您的服务器时,内核将他的请求放入一个 'listen queue' 附加到您服务器的侦听 'socket'。

当您的服务器准备好为请求提供服务时,它会 'accepts' 来自侦听套接字的连接,这会为客户端和服务器之间的通信创建一个新的套接字,然后服务器处理该请求。

如果您的服务器可以同时处理 20 个请求,这通常意味着它最多可以有 20 个线程同时处理连接。这通常是通过使用有限大小的 'thread pool' 来实现的。当池中的线程可用时,它从侦听套接字获取一个新连接(可能必须等待一个),并对其进行处理,只是这些线程中最多有 20 个限制了数量您将同时处理的请求。 (与任何类型的缓冲区无关,真的)

如果当一个新请求进来时服务器已经在处理20个并发请求,那么客户端的请求将在套接字监听队列中等待,直到服务器最终拾取它,否则会超时并失败。等得太久了。

监听队列中可以等待的连接请求数量也有限制(TCP 积压)。如果在监听队列已满时有连接请求进来,则立即拒绝。如果您希望您的服务器同时处理 20 个请求,那么监听队列的长度应该至少为 20,以防 20 个请求同时到达——它们将全部排队直到您的服务器接收它们。