根据C10k和这篇论文,随着越来越多的客户端连接并且创建了越来越多的线程,1个线程/连接的服务器的吞吐量会降低。根据这两个来源,这是因为存在越多的线程,就会花费更多时间在上下文切换上,而不是实际工作。事件驱动的服务器似乎在高连接数下不会遭受太多性能退化的影响。
然而,事件驱动的服务器也会在客户端之间进行上下文切换,只是它们在用户空间内完成。
然而,事件驱动的服务器也会在客户端之间进行上下文切换,只是它们在用户空间内完成。
- 为什么这些用户空间的上下文切换比内核线程上下文切换更快?
- 内核上下文切换究竟做了什么,使得其成本更高?
- 内核上下文切换的成本是多少?需要多长时间?
- 内核上下文切换的时间与线程数量有关吗?
任何
上下文切换都会将控制权转移到内核。实际上,运行在内核模式下的调度程序选择要驱逐的进程,然后开始替换页表并使TLB和缓存失效。那么,“用户模式”上下文切换到底是什么,它为什么更快? - AjB