Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和Python中的威胁安全与性能_Java_Python_Multithreading_Concurrency - Fatal编程技术网

Java和Python中的威胁安全与性能

Java和Python中的威胁安全与性能,java,python,multithreading,concurrency,Java,Python,Multithreading,Concurrency,用例:单个数据结构哈希表、数组等,其成员经常被多个线程访问,很少被相同的线程修改。如何在保证线程安全(即防止脏读)的同时保持性能 Java:数据结构的并发版本并发hashmap、Vector等 Python:由于GIL,如果只有线程访问它,就不需要了。如果有多个进程将读取和更新数据结构,则使用threading.Lock。强制每个进程的代码在访问数据结构之前获取锁,在访问数据结构之后释放锁 这听起来合理吗?Java的并发数据结构会对读取速度造成太大的影响吗?python中是否有更高级别的并发机制

用例:单个数据结构哈希表、数组等,其成员经常被多个线程访问,很少被相同的线程修改。如何在保证线程安全(即防止脏读)的同时保持性能

Java:数据结构的并发版本并发hashmap、Vector等

Python:由于GIL,如果只有线程访问它,就不需要了。如果有多个进程将读取和更新数据结构,则使用threading.Lock。强制每个进程的代码在访问数据结构之前获取锁,在访问数据结构之后释放锁


这听起来合理吗?Java的并发数据结构会对读取速度造成太大的影响吗?python中是否有更高级别的并发机制?

我强烈建议您为应用程序衡量它,而不是对性能进行推理。不要冒线程问题的风险来提高性能,这是您可能永远不会注意到的

因此:编写线程安全的代码时不需要任何性能技巧,使用一个合适的分析器来查找在数据结构访问中花费的时间百分比,然后确定这部分是否值得改进

我打赌还会有其他瓶颈,而不是共享数据结构


如果您愿意,请将您的代码和分析器结果返回给我们。

锁基本上是用于在Java中实现许多并发结构的锁,但不能保证线程安全。例如,它们不能防止死锁的情况,不能在进程之间共享Python高级数据结构,如dict和list。您可以在PyPI上找到提供类似dict和list的可共享数据结构的库,但也可以找到可共享的并发数据结构。就这点而言,您可以为两种语言找到持久的非变异共享数据结构。此外,如何保持性能通常不是如何同步数据结构的问题。如果你只是想在不知道什么重要的情况下优化一切,最明显的答案是永远不要使用Python,但更明显的答案是你不应该这样做。我建议每个问题问一个问题。比如:问一个专门针对java的问题,一个针对python的问题。真正的问题,正如前面所述:你需要把事情放在透视图中。您可以仔细查看真实数据,以了解真正的瓶颈所在。然后,您可以在对这些瓶颈进行非常具体的微调与接受更简单的解决方案之间取得平衡,这些解决方案虽然性能不高,但随着时间的推移更易于维护。