传递开销和对象引用的Python参数



我用Python构建了几个线程服务器项目,同步总是一个令人烦恼的问题。

通常,当工作从一个线程传递到另一个线程时,需要从多个线程访问的数据结构中找到相关的对象和信息。使用锁等进行同步是规范的方法,但通常很难确定同步是否准确。即使在不需要相关对象的地方,也可以通过沿处理管道携带相关对象来避免这种情况。

由于这些通常是对象引用,这会增加多少开销?从逻辑上讲,这不应该是真的,那么这是一种常见的做法吗?

如果有更多的上下文,这个问题会更容易回答。但一般来说,在作业负载中传递一些对象引用不会产生明显的时间成本。与每个操作系统线程相关的内存开销可能大于线程本地引用所消耗的所有内存。主要的风险是,持有不必要的引用会阻止垃圾收集的发生,但如果将这些对象存储在全局数据结构中,也会发生这种情况。

使用锁等进行同步是规范的方法,但通常很难确定您的同步是否准确。

使用锁通常很容易确保单个数据结构没有数据竞争。您只需要使用锁定-解锁调用来包装每个读写操作。尽管这会降低争用情况下的性能,但相比之下,这会使线程本地存储速度更快。

只要你不为每个线程制作巨大数据结构的深度拷贝,你就可以了。通常鼓励将作业上下文保存在线程本地存储中,以便在不与其他线程发生争用的情况下对其进行访问。

最新更新