【发布时间】:2011-03-18 23:36:25
【问题描述】:
所以,我遇到了一个事件发生的情况,然后我需要将它“广播”给几个订阅的“听众”。
我目前的设计是针对每个订阅者的循环,并按顺序工作,依次通知每个“接收者”。
但是,在某些负载/压力测试中,我发现它排队的次数比我喜欢的多
我想提供一种让接收者列表或多或少同时接收通知的方法。
线程池已出。我有自己的理由。
我关心的是性能。 这是我正在考虑的......
A.每次事件触发时,都会为每个接收者创建一个线程来执行接收者特定的通知。通知完成后线程终止。
----或----
B. 事件第一次触发时,为每个接收者创建一个线程,但它是一个“无限”线程(有一个保持其活动的循环),并且通知详细信息被编组到这些线程中的每一个,然后处理新数据.
所以,问题是:创建一个新线程或将数据编组到现有线程是否更昂贵,或者如果同样昂贵,为什么选择一个而不是另一个?
【问题讨论】:
-
线程池似乎是显而易见的解决方案。你能解释一下为什么它不是一个选项吗?
-
仅供参考:添加了 .NET 标签,因为这与 C# 无关
-
@Peter - 我更喜欢(在这种情况下)使用线程对象,以便我可以访问线程对象的各种方法/属性。例如,出于调试/支持的原因,我喜欢为我的线程设置一个名称。此外,TP 线程始终是后台,在这种情况下我不想要。
标签: c# .net multithreading broadcasting