【问题标题】:Number of concurrent requests a server can handle服务器可以处理的并发请求数
【发布时间】:2020-11-02 11:39:42
【问题描述】:
在《Computer Networking - A Top Down Approach》一书中,我刚刚研究过,TCP套接字由四个参数唯一标识:
- 发件人的 IP 地址
- 发件人的端口号
- 接收方的 IP 地址
- 接收方的端口号
以服务器为例,我们知道服务器的IP地址和端口号是固定的。客户端的 IP 地址和端口号显然会有所不同。如果有新请求,服务器将打开一个新线程(打开一个新的 TCP 套接字)来处理该请求。
我的问题是,我们可以执行任何计算来计算单个服务器机器可以处理的最大客户端数吗?
谢谢
【问题讨论】:
标签:
tcp
server
concurrency
【解决方案1】:
你好,这是个好问题。
首先,如果一个线程处理一个连接,那么 x86 计算机的限制将非常低。由于虚拟内存被限制为 4GB,因此每个进程大约有 1000 个。对于 x64,它会相对较高。但是线程之间的切换并不是我们想要看到的。
所以,我们使用一个线程来处理大量的连接,也就是 I/O 多路复用。
另外,这个还是有局限性的,我们称之为C10K和C10M,我们通过epoll或者IOCP等非阻塞I/O多路复用来解决这些问题,而DPDK对于解决C10M很有用。
如果你想达到更高的连接数,那么我们使用分布式系统,而不是只有一台服务器。
服务器的局限性说来话长,我想你可以从中学到很多东西。