多线程和进程信令

Posted

技术标签:

【中文标题】多线程和进程信令【英文标题】:Multithreading and process signalling 【发布时间】:2012-01-30 10:28:51 【问题描述】:

我有一个通过 Windows 服务 (vb.net) 执行的工作进程。它每 5 分钟执行一次并检查数据库中的“作业”表。我还有一个 Web 应用程序 (asp.net vb),它允许用户在出现错误时“暂停”当前正在运行的作业。

Web 应用程序向 Windows 服务发出停止处理信号的最佳方式是什么?它们在同一台机器上运行,但是如果您对它们是否在不同的机器上运行有建议,那就太好了。

我想避免在每次迭代期间调用数据库或文件系统来检查“状态”。

我有一个存储每个工作进程的自定义信息的数据库 - 如果可以通过 .Net 检索线程 ID 或进程 ID,我可以存储它以使 Web 应用程序能够向服务应用程序发送消息?

【问题讨论】:

【参考方案1】:

您可能希望使您的服务成为 WCF 服务器。

然后,您可以从您的网络应用程序或任何方便的地方与它通信。您还可以提供进度/反馈 API 以及命令/控制 API - 这取决于您。

【讨论】:

【参考方案2】:

.Net Framework 中有多种方法可以实现进程间通信。列举两个在框架中可用的:

.NET 远程处理 Windows 通信基础 (WCF)

虽然第一个方法很简单但很老,但新的方法应该是 WCF。我建议您参考Beginner's Guide to Windows Communication Foundation 中的各种示例。

【讨论】:

【参考方案3】:

您还可以使用依赖于系统信号量的named semaphore,允许您的进程实现生产者/消费者模式。

【讨论】:

以上是关于多线程和进程信令的主要内容,如果未能解决你的问题,请参考以下文章

多线程和多进程的区别

多线程和多进程模式有啥区别

进程和线程单线程多线程和多进程

多进程和多线程有啥区别?

进程和线程,线程安全,python如何实现多进程,多线程

什么是多线程,多进程?