gpt4 book ai didi

java - 在线程之间共享大数据而不同步访问

转载 作者:行者123 更新时间:2023-11-30 02:51:08 25 4
gpt4 key购买 nike

例如,考虑在用户向文档中输入新内容时对大型文档进行拼写检查的情况。为了避免延迟用户的工作,拼写检查是在单独的线程上完成的,但拼写检查器仍然需要访问文档。我们可以将对文档的所有访问放入同步块(synchronized block)中,但这会迫使编辑线程减慢速度以适应拼写检查线程。

原则上,用户交互线程永远不应该因任何原因而被阻塞。如果由于从多个线程访问文档而导致任何延迟,我们希望它们始终发生在拼写检查线程中,但是什么样的线程通信可以保证这一点?

同样的问题不仅仅适用于拼写检查。每当一个线程是某些数据的主要所有者,而另一个线程对数据执行非关键后台计算时,我们就会面临同样的情况。我认为解决方案是某种消息传递系统,其中辅助线程将请求发送到主线程,并按照主线程自己的速度进行处理。

最佳答案

只是想分享一些我会使用的技巧:

  1. 使用公平的ReadWriteLock。
  2. 使锁细粒度化,避免线程持有锁的时间过长。
  3. 将耗时的代码移到锁之外。它可能需要复制一些任务上下文。
  4. 在某些情况下使用写入时复制。例如,将文档拆分为多个小部分。假设用户只编辑一部分。用户正在以正常的人类速度进行编辑。然后您可以将每个部分设为 Copy-On-Write 集合。如果你愿意的话,甚至可以是牛的牛集合。

关于java - 在线程之间共享大数据而不同步访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com