我正在尝试优化我的Linux服务器,使其每个进程处理10,000个线程,而现在仅处理382个线程。按照本文的说明,以下公式用于查找可能的总线程:
number of threads = total virtual memory / (stack size*1024*1024)
这意味着线程将所有数据存储在虚拟内存中。据我所知,虚拟内存是Linux机器中的交换空间,交换空间存储在硬盘上,而不是RAM或缓存。
所以我的问题是我们的线程是否使用硬盘存储来处理/存储其数据。
如果是,那么这不会影响性能吗?我们可以通过将它们放在RAM或缓存中来提高性能吗?怎么样?
如果否,线程到底如何工作?
更新:
根据无用的回答,虚拟内存是一个大致包括以下内容的系统:
- 物理内存(RAM)
- 您附加的所有交换文件
- 硬件支持,用于在物理内存中不存在虚拟地址时将虚拟地址转换为物理地址并发出页面错误
- (内核)软件支持:通过按需从交换中拉入页面来管理该硬件使用的查找表来处理那些页面错误
因此,虚拟内存上的所有内容都集中在RAM(真实内存)和硬盘(交换文件)上。正如詹姆斯在回答中所解释的那样,内核使用诸如LRU之类的算法对Ram与HDD做出了决定。