【问题标题】:C# Multi Thread Concept QuestionC#多线程概念问题
【发布时间】:2011-03-26 04:22:41
【问题描述】:

有人知道我将如何完成以下任务吗?我一直在玩 C# 中的线程池,但我觉得这不适合它。

  1. 启动应用程序

  2. 检查新客户 > 客户有他们想要完成一些工作的项目。

  3. 在执行任务之前解析客户端请求。现在应该排队等待检查。

  4. 检查每个客户端(时间间隔示例:30 秒)> 执行任务。

  5. 同时我必须重复步骤 2-3,因为我期望:

    1. 新客户
    2. 修改后的客户端。
    3. 没有变化。

重要的是要注意会有很多客户端,但他们的任务应该执行得相当快,但是,我不希望从一个需要更长处理时间的客户端任务中创建死锁。

提前致谢!

【问题讨论】:

  • 谢谢,我会记住的。

标签: c# .net multithreading thread-safety


【解决方案1】:

不是像你一样使用“拉”模型,而是不能使用“推”模型吗?也就是说,使用事件而不是每 x 秒检查一次客户端状态。

如果你不能这样做,你可以使用线程池或者windows服务。

丽安娜

【讨论】:

  • 我同意我不喜欢依赖 EventResetArg。
【解决方案2】:

我同意客户端启动操作的推送模型从长远来看会更好地工作,这样服务器只需要在确实有事情要做时才工作,而不是不断地轮询所有客户端。

客户端可以将请求插入队列,然后服务器处理它们。这样,您就可以控制服务器可以并行处理多少个请求,而不会干扰它们。

BlockingCollection 是 .Net 4 中引入的一个新类,专为此类工作而设计。 This 是一篇关于如何使用它的非常好的文章。如果您是 .Net 并行编码的新手,您可能想阅读整个系列,非常好。

GJ

【讨论】:

  • 如何解决必须重复步骤 2-3 并继续每 xmin 处理客户端任务的问题。我认为 BlockCollection 是我昨晚看到的一个好主意。试图用它来理解一个简单的概念。
  • 我不会轮询客户端,而是客户端将工作放入队列中。然后服务器完成工作并通过回调将结果发送回。 WCF,你用什么交流?
  • 我现在只是在 .net 4.0 中执行命令提示符,但最终它将作为服务运行。
  • 不,我的意思是客户端如何与服务器通信?既然他们处于不同的进程中,他们需要某种方式与服务器交谈,你用什么来做这件事? (套接字、WCF、MPI 还是其他东西?)这决定了当请求的结果完成时如何让服务器回调到客户端。否则客户端应该轮询服务器或其他东西。
  • 嗯,我正在使用 PDH.dll 来马歇尔调用性能数据,所以这就是我与客户沟通的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多