0

我正在做ddbmock 项目。基本上,这是一个复制 Amazon DynamoDB API 的服务器。

尽管此实现不直接涉及线程,但它很可能在多线程环境中运行,并且目前,我知道它具有不可预测的“特性”:) 所有线程都将在同一个存储中工作......

第一步是添加互斥体,但我如何测试我没有遗漏任何东西并且设计确实有效?有什么可靠的方法吗?

4

2 回答 2

3

观看视频,您将意识到在 CPython 中无法可靠地执行您想要的操作。这仅仅是因为 python 将一切都交给了操作系统。它不以任何方式(主动)控制调度,它只是释放 GIL,有时让操作系统在需要进行上下文切换。这对多核计算机产生了一些丑陋的后果。

无论如何,在其他语言中,这也是很难做到的。调试并发程序是一个地狱,这就是为什么你应该尽可能避免它(如果你想进行可靠的测试)。

于 2012-11-13T17:09:34.190 回答
3

@martineau,问题不仅限于CPython。任何时候有共享资源都可能导致并发问题。

一种方法是完全避免它。序列化所有内容,不允许并发。鉴于这是一个内存模拟服务器,这可能是一个合理的限制。

但是,如果您确实想提供并行访问,我会使用的策略是长时间使用各种请求对系统进行压力测试。这往往会摆脱大量的竞争条件错误。否则我知道没有可靠的方法来证明程序没有并发错误。

于 2012-11-13T18:31:00.750 回答