c10k中每个线程有一个以上客户端



在c10k问题中,每个客户端通常使用一个线程的最佳原因是什么?

我们可以把5,10,或25每个线程?性能会有任何负面变化吗?

每个客户端有一个线程似乎对系统来说非常费力,如果每个线程有25个线程,那么10000个线程可以有400个,而不是10000个线程。

有两种完全不同的模型用于处理10K+连接:

  • 多线程,每个连接一个线程
  • 单线程,具有非阻塞操作和异步I/O(每台机器可能有几个独立的进程,以充分利用可用的核心)

这两种型号都可以用于处理超过10万个连接,而且这两种机型在某些领域都有各自的优势。在直接比较中,它们的区别如下:

多线程:

  • 堆栈造成的高内存占用
  • 需要同步操作以避免数据竞争

单线程:

  • 一切都必须是非阻塞的(操作系统的糟糕支持,例如Linux上的文件系统操作)
  • 所有的东西都必须是异步的(编程语言的糟糕支持,例如控制结构和错误处理)

将这两种型号结合起来是可能的。在这种情况下,通常使用每个核心一个线程(而不是N个连接一个线程)。这个模型有一些很好的用例。然而,还有一个巨大的问题:它结合了两种模式的缺点。这意味着,您必须努力实现线程安全非阻塞异步。通常情况下,工作量是纯模型的两倍。

这就是为什么在大多数应用程序中,模型通常优于混合模式的原因。例外情况是边缘组件,它们每秒必须处理数百万个请求,例如负载平衡器和代理。

相关内容

  • 没有找到相关文章

最新更新