我的 C# 应用程序遇到了一些问题。
我确保线程不会访问自身之外的任何资源。
现在我有线程池线程,它建立一个 tcp 连接,创建线程对象并运行,1 个线程的性能非常好。对于 50 个线程,它看起来是一样的,可能慢 5-10%,CPU 10-20%。使用 100 个线程,CPU 使用率从 10-20% 变为 70-99%。
我们的一位开发人员说,与 linux 线程相比,windows 线程很糟糕,上下文切换会招致巨大的损失。他建议使用运行所有实例的 4-8 个核心线程创建多路复用。
但我认为一旦你有 1000 多个线程,这样的问题就会开始发生。任何人都可以评论一些好的资源来阅读更多关于这个主题、线程/cpu 性能和正确做法的信息吗?
编辑:好的许多答案似乎有点离题,因为正在做出一些假设,所以我将添加一些额外的点:
Running 3 applications with 50 threads at 10-20% cpu usage makes them all use that much. 30-60% CPU usage total.
Running 1 application with 150 threads makes it cap cpu at 70-99%.
这就是我所说的线程不缩放的意思。