用例:单个数据结构(哈希表、数组等),其成员被多个线程频繁访问,并且这些相同的线程很少修改。如何在保证线程安全(即防止脏读)的同时保持性能。
Java:并发版本的数据结构(并发hashmap、Vector等)。
Python:如果只有线程访问它,则不需要,因为有 GIL。如果是多个进程读取和更新数据结构,则使用 threading.Lock。强制每个进程的代码在访问数据结构之前获取锁并在访问数据结构之后释放锁。
这听起来合理吗? Java的并发数据结构会对读取速度造成太大的损失吗? python中有更高级别的并发机制吗?
最佳答案
我强烈建议您为您的应用程序测量性能,而不是推理性能。不要为了提高性能而冒线程问题的风险,而您很可能不会注意到。
因此:编写没有任何性能技巧的线程安全代码,使用合适的分析器来查找数据结构访问中花费的时间百分比,然后决定该部分是否值得改进。
我敢打赌还会有其他瓶颈,而不是共享数据结构。
如果您愿意,请向我们提供您的代码和分析器结果。
关于java - Java 和 Python 中的威胁安全与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179845/