繁体   English   中英

C10k中每个线程有多个客户端

[英]Having more than one client per thread in c10k

在c10k问题中为什么每个客户端通常使用一个线程有最佳的理由吗?

我们可以在每个线程上放置5、10或25吗? 绩效会有负面变化吗?

每个客户端只有一个线程似乎对系统造成了很大的负担,如果每个线程只有25个线程,那么我们可以有400个线程(10,000个)而不是10,000个(10,000个)。

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

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

两种型号均可用于超过100K的连接,并且两种型号在某些领域都有其优势。 直接比较,它们之间的区别如下:

多线程:

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

单线程:

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

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

这就是为什么对于大多数应用而言, 模型通常比混合模型更受青睐。 边缘组件例外,它们必须每秒处理数百万个请求,例如负载平衡器和代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM