我使用 Amazon EC2 服务器小型实例,默认情况下它允许每个进程有 382 个线程。但是,我希望在单个进程中运行 10,000 个线程。最近,我了解到这可以通过减少堆栈限制或增加虚拟内存来完成。
据我所知,可以通过增加 Linux 中的 RAM 或交换空间来增加虚拟内存。增加 RAM 不是一个选择。我知道如何增加交换空间,但我不确定应该选择的最佳大小是多少。
我不清楚的是,当我运行线程时交换空间和 RAM 如何工作?是否有一些特定的限制,超过该限制后交换内存会使线程变慢?我应该使用最佳的交换空间量吗?:
答案1
一般情况下,系统管理员会将 SWAP 设置为 1x 或 2x 内存。对于你的情况,我不知道这是否适用,甚至是否足够。
如果没有您正在运行的内容的详细信息,则很难知道 SWAP 的适当站点是什么,但一般来说,无论您运行什么,如果将其换出到磁盘,您都会遇到性能下降,这可能会增加运行时间震级。因此,在您投入 10k 线程进行疯狂交换之前,您可能应该查看应用程序的配置或设计并执行其他操作。
因此,分析您的应用程序并确定活动并发线程的数量,也许您不需要运行这么多。
根据要求提供解决方案
当您建立与网站或网络服务器的连接时,您将维护发送到该特定连接的请求列表,因为将按顺序收到响应。当线程向服务器发送请求后,您将循环等待select()
数据可用。当发生这种情况时,您接收数据并将请求信息和接收到的数据发送到另一个线程进行处理。