OnValidate()
的一个要点:
我已经实现了每个连接的线程模型
我对此声明有以下问题:
答案 0 :(得分:1)
如果您的实现语言为分配给该线程的堆栈大小设置了最小值,那么如果您有大量连接,则内存不足。创建许多短期线程也需要付出代价。
对于尝试访问共享数据的许多线程,或者如果您的操作系统没有将网络事件集成到线程唤醒,您也可能遇到性能或可靠性问题。
在大多数情况下它工作正常 - 大多数系统有足够的内存用于~10,000个并发客户端(如果你不打扰设置线程的堆栈大小并将其保留为1MiB,则在Windows上为~1,000)。
可以使用异步事件驱动库,它允许N个线程池来处理M个连接。仅使用线程池来创建线程可以节省创建它们的成本,但是不会阻止大量客户端的内存不足。
这几乎从来都不是技术上“最好”的方法,但有时候会使实用的工程意识。
历史上,语言没有提供用于创建线程池或使用异步套接字的简单库。如果您使用这样的语言,并且不希望获得许多连接,并且连接往往保持连接的时间更长,那么开发人员资源不值得投资于技术上更好的解决方案。
答案 1 :(得分:0)
此模型在设计时有哪些缺点 服务器/分布式系统?
一个连接=一个线程。这会影响服务器的可伸缩性,因为连接数可能会大大超过系统的理想线程数。
在大多数情况下,哪种方法更有效?
执行程序的线程池。要为每个连接(如果有)执行的任务在池中排队,请在fifo中完成作业。
在哪些情况下,它可能是正确的方法?
不知道这些情况。