|
|
1
3
是
以下是可能发生的情况:
一个快速的补救措施是增加
请记住,事情发生的速度可能比预期的要快(即,在您有机会在几行后增加FCount之前,用PostMessage发布的消息会被另一个线程捕获和处理),尤其是在您处于真正的多线程环境(多个CPU)中时。这就是为什么我早些时候问“问题机器”是否有多个CPU/内核。 解决此类问题的一个简单方法是用额外的日志记录来构建代码,以便在每次输入方法、输入/离开关键部分等时进行日志记录。然后,您可以分析日志以查看事件的真实顺序。 另外,在这样的生产者/消费者场景中,一个很好的小优化是使用两个队列而不是一个队列。当消费者醒来处理满队列时,您可以将满队列与空队列交换,只需锁定/处理满队列,同时可以填充新的空队列,而无需两个线程尝试锁定彼此的队列。不过,在交换两个队列时,您仍然需要一些锁定。 |
|
|
2
1
在检查队列大小并发出
看看你是否真的遇到了种族问题,而不是
无论如何,这台特定计算机的CPU或内核数量是否与您认为没有问题的其他计算机不同?有时,当您从单CPU机器切换到具有多个物理CPU/内核的机器时,可能会出现新的竞争条件或死锁。 |
|
|
3
-1
是否会有第二个实例在不知不觉中运行并吃掉消息,将其标记为已处理? |
|
|
wahyu · 云消息API(旧版)已禁用[重复] 2 年前 |
|
|
Aman Sharma · 无法从mesibo中的组中删除成员 3 年前 |
|
|
littleK · RabbitMQ扇出交换机故障 13 年前 |
|
|
littleK · 使用ActiveMQ获得比RabbitMQ更好的性能 13 年前 |