首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c10k中每个线程有多个客户端

在c10k中每个线程有多个客户端
EN

Stack Overflow用户
提问于 2014-04-23 09:40:05
回答 1查看 271关注 0票数 0

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

我们可以把5,10,或25每线程?业绩会否有任何负面的改变?

每个客户端都有一个线程,这对系统来说似乎很麻烦,如果我们每个线程有25个线程,那么我们可以有400个线程,而不是10000线程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 18:02:02

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

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

这两种模型都可以用于100 K以上的连接,而且这两种模型在某些方面都有它们的好处。直接比较,它们的区别如下:

Multi-Threaded:

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

Single-Threaded:

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23240495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档