3

我对服务器如何处理数千个请求感到有些困惑。我想如果有数千个请求,最终其中两个将不得不同时访问服务器。如果两条消息同时命中它,它只能处理一条吗?

我知道,如果多个请求以非常接近但不完全相同的时间到达服务器,那么它可以在完成另一项工作之前非常迅速地将工作分配给其他服务器。我没有得到的是,当一台机器在完全相同的时刻收到两个请求时会发生什么。

4

2 回答 2

8

即使两个 cpu 在完全相同的时间处理请求,并且它们发生冲突,那么在某个阶段他们会说“我想做某事,但不能在其他任何事情发生的同时完成”。如果两个 cpu 同时执行此操作,则会有一个预定义的顺序 - 我想降低编号的 CPU 将获得优先权。

这种阻塞只需要一两个周期——只要足够长的时间说“我声称拥有这个资源”(称为锁)。然后该块将被解除阻塞,并且另一个 CPU 可以恢复(只要它不想访问相同的数据)。

这太简单了。

此外,两个请求不可能通过网络“同时进入”,如果只有一个网卡 - 如果它们同时进入,完全(在千兆网络上),那么两个数据包会发生碰撞;两个请求将在稍微随机的时间后重试,直到没有冲突。

请记住,这是以您计算机的时钟速度运行的(例如高达 3ghz),因此“每秒千次”算不上什么。每秒 100 万个请求,每 1000 个 cpu 周期就有 1 个请求。

于 2013-07-03T03:40:09.277 回答
0

所有服务器都可能是并发服务器。服务器可以是迭代的,即它遍历每个客户端并一次处理一个请求。或者,一个服务器可以同时并行处理多个客户端,这种类型的服务器称为并发服务器。
他们还通过负载平衡和制作网络缓存来生成响应。
这两个重要的机制用于同时允许许多用户。
网页缓存
Web 缓存是一种用于临时存储(缓存)Web 文档(例如 HTML 页面和图像)的机制,以减少带宽使用、服务器负载和感知延迟。网络缓存存储通过它的文档副本;如果满足某些条件,则可以从缓存中满足后续请求。1 Google 在其搜索结果中的缓存链接提供了一种从最近出现故障的网站中检索信息的方式,并且提供了一种比单击直接链接更快地检索数据的方式。来自 Wiki
负载均衡
负载平衡是一种计算机网络方法,用于在多台计算机或计算机集群、网络链接、中央处理器、磁盘驱动器或其他资源之间分配工作负载。成功的负载平衡可以优化资源使用、最大化吞吐量、最小化响应时间并避免过载。使用具有负载平衡的多个组件而不是单个组件可以通过冗余来提高可靠性。负载均衡通常由专用软件或硬件提供,例如多层交换机或域名系统服务器进程。来自 Wiki

这是一张多线程服务器的小图

于 2013-07-03T03:39:05.030 回答