我需要非常关注当前多线程项目中的速度/延迟。
考虑以下线程间通信:
A
。这些数据显着改变了其内部状态。A
的当前,改变的内部状态,以做出一些决定。我基本上可以想到两种方法:
线程#2有一个指向对象A
的指针,当发出信号时(例如,通过不断检查通过无锁队列发送的小对象或检查共享的原子bool),线程#2锁定对象A
并读取它。
线程#1将对象副本的某些版本推送到lockfree队列,以便线程#2可以直接接收它,使用它,并在完成后处理副本。
方法#1避免了方法#2所需的大型对象的昂贵副本,但它总是需要锁定/解锁,如果我理解正确,则需要额外的L3缓存命中。
我知道可能没有任何简单的性能答案......我可能只需要进行基准测试。我最感兴趣的是最佳实践建议。具体来说,我想知道一个缓存内存级别的问题,以了解如何在内部传递和复制信息。
答案 0 :(得分:2)
这实际上取决于线程2尝试从线程1访问多少信息。如果它需要完全访问所有线程1的对象/内存,那么是的,复制所有这些代价高昂并且我会锁定。但这也取决于时间。如果所有线程2需要检查一个状态,就像一个变量,我会让线程1更新一个更小的对象,它可以在没有锁的情况下共享,因为线程2只读取而线程1只写。
如果线程2只读取,你可能甚至不需要锁定,并且在更新数据状态时可以做出决定。