每个连接线程模型有哪些缺点?

时间:2016-08-25 10:50:44

标签: multithreading network-programming language-agnostic distributed-computing distributed-system

OnValidate()的一个要点:

  

我已经实现了每个连接的线程模型

我对此声明有以下问题:

  1. 在设计服务器/分布式系统时,此模型有哪些缺点?
  2. 在大多数情况下,哪种方法更有效?
  3. 在什么情况下它可能是正确的方法?

2 个答案:

答案 0 :(得分:1)

  1. 在设计服务器/分布式系统时,此模型有哪些缺点?
  2. 如果您的实现语言为分配给该线程的堆栈大小设置了最小值,那么如果您有大量连接,则内存不足。创建许多短期线程也需要付出代价。

    对于尝试访问共享数据的许多线程,或者如果您的操作系统没有将网络事件集成到线程唤醒,您也可能遇到性能或可靠性问题。

    1. 在大多数情况下,哪种方法更有效?
    2. 在大多数情况下它工作正常 - 大多数系统有足够的内存用于~10,000个并发客户端(如果你不打扰设置线程的堆栈大小并将其保留为1MiB,则在Windows上为~1,000)。

      可以使用异步事件驱动库,它允许N个线程池来处理M个连接。仅使用线程池来创建线程可以节省创建它们的成本,但是不会阻止大量客户端的内存不足。

      1. 在什么情况下它可能是正确的方法?
      2. 这几乎从来都不是技术上“最好”的方法,但有时候会使实用的工程意识。

        历史上,语言没有提供用于创建线程池或使用异步套接字的简单库。如果您使用这样的语言,并且不希望获得许多连接,并且连接往往保持连接的时间更长,那么开发人员资源不值得投资于技术上更好的解决方案。

答案 1 :(得分:0)

  

此模型在设计时有哪些缺点   服务器/分布式系统?

一个连接=一个线程。这会影响服务器的可伸缩性,因为连接数可能会大大超过系统的理想线程数。

  

在大多数情况下,哪种方法更有效?

执行程序的线程池。要为每个连接(如果有)执行的任务在池中排队,请在fifo中完成作业。

  

在哪些情况下,它可能是正确的方法?

不知道这些情况。