【发布时间】:2023-07-17 23:07:01
【问题描述】:
我正在开发一个应用程序,该应用程序分为瘦客户端和服务器部分,通过 TCP 进行通信。我们经常让服务器向客户端发出异步调用(通知)以报告状态变化。这避免了服务器浪费太多时间等待客户端的确认。更重要的是,它避免了死锁。
这样的死锁可能发生如下。假设服务器将同步发送状态更改通知(请注意,这是一个有点构建的示例)。当客户端处理通知时,客户端需要同步向服务器请求信息。但是,服务器无法响应,因为他正在等待对他的问题的回答。
现在,通过异步发送通知可以避免这种死锁,但这会带来另一个问题。当异步调用的速度快于它们的处理速度时,调用队列会不断增长。如果这种情况保持足够长的时间,呼叫队列将完全填满(充斥着消息)。我的问题是:发生这种情况时该怎么办?
我的问题可以总结如下。我是否真的必须选择发送通知而不阻塞(冒淹没消息队列的风险,或者发送通知时阻塞冒引入死锁?有什么技巧可以避免消息队列泛滥吗?
注意:重复一遍,服务器在发送通知时不会停止。它们是异步发送的。
注意:在我的示例中,我使用了两个通信进程,但是两个通信线程存在相同的问题。
【问题讨论】:
-
它是什么队列 - 一些自定义实现的队列或 Windows 消息队列?
-
如果有人试图对您的服务器执行此操作,则称为 DDOS(定向拒绝服务)攻击。
标签: multithreading language-agnostic concurrency synchronization