簡體   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