我最近参加了一次开发人员采访,被问到以下问题: 我有一台可以处理20个请求的服务器。使用哪种数据结构对此建模?如果您的请求超过20个,将会怎样?即,如果缓冲区溢出,您将怎么办? 我不是来自CS背景。我正在从另一个领域过渡。我自学编程和DSA。因此,我想知道这些问题的答案。预先感谢!
答案 0 :(得分:1)
关于可同时处理20个请求的服务器:
您的问题表明您尚未以合理的方式考虑此问题,可能还远远不能理解其工作原理。没问题-这只是意味着您可能有比您预期更多的学习机会。
为帮助您,我将为您写出正确的答案,其中包含您可以在Google上搜索的条款:
当客户端尝试连接到您的服务器时,内核会将其请求放入连接到服务器的侦听“套接字”的“侦听队列”。
当服务器准备好处理请求时,它会“接受”来自侦听套接字的连接,这会为客户端和服务器之间的通信创建一个新的套接字,然后服务器将处理请求。
如果服务器可以同时处理20个请求,则通常意味着它最多可以有20个线程同时处理连接。通常通过使用有限大小的“线程池”来实现。当池中的一个线程可用时,它会从侦听套接字中获得一个新的连接(可能必须等待一个),并对其进行处理,并且仅这些线程中最多有20个限制了该数量的要求,您将同时处理。 (实际上与任何类型的缓冲区无关)
如果服务器在新请求进入时已经在处理20个并发请求,则客户端的请求将在套接字侦听队列中等待,直到服务器最终将其接收,否则,如果它也一直在等待,它将超时并失败长。
侦听队列中可以等待的连接请求数也有一个限制(TCP待办事项)。如果在侦听队列已满时出现连接请求,则会立即拒绝该请求。如果希望服务器同时处理20个请求,则侦听队列的长度至少应为20,以防20个请求同时到达-它们将全部排队,直到您的服务器接听为止。