假设我有一个运行50个线程的高性能服务器应用程序,其中每个线程都使用epoll()
在1000个套接字上侦听数据。当一些数据出现在套接字上时,线程会处理它。假设这种处理非常快,即不会阻塞很多。因此,所有50个线程都可以很好地扩展。鉴于这种情况,我听说如果我进入并将线程数减少到5(即使得1/10)并将每个线程的套接字增加到10000(即使它们成为10次)系统虽然连接数保持不变,但整体速度会更快。我想象这会发生这种情况,因为当线程数减少了上下文切换次数的十分之一时,CPU缓存变得陈旧的可能性显着降低,从而导致加速。
但是,我想知道这是否真的有用。
我担心这个特定应用程序之外的系统中的其他线程将如何影响图片。我假设所有线程,无论它们在哪个进程中,都可以从调度程序的角度相互竞争CPU。如果在第一个场景中系统中的总线程数1050和我的更改后它们降到1005,那么它在系统范围内的变化不大。你仍然有大致相似数量的线程竞争CPU。所以在这种情况下,我的应用程序不会受益匪浅。我的问题是我的想法是否正确?换句话说,无论何时谈论基于epoll()
的应用程序中的线程数,您都不应该考虑系统中的总线程数而不仅仅是您关注的应用程序?