atom java 解析_技术大牛讲解 Atom 新并发缓存区实现

原标题:技术大牛讲解 Atom 新并发缓存区实现

[ ]

【IT168 评论】作为Github上一款开源的文本编辑器,Atom一经推出就受到了广泛的欢迎。Atom的几个功能取决于基于开放缓冲区内容的潜在的长时间运行计算,但直到最近,才有可能从主线程上运行的Java访问缓冲区的文本。这使得很难保证Atom在所有场景下的响应能力,特别是在编辑较大的文件时。

随着Atom 1.19版本的发布,这种情况发生了变化,这开辟了通过C ++实现的新文本存储数据结构显著增加并行性的途径。这种新的设计为性能和可扩展性提供了许多好处,其中主要的工作线程能够读取先前缓冲区状态的快照,而不会阻塞主线程上的写入操作。在这篇文章中,将深入介绍Atom对文本存储的新方法,然后探索将其成为许多优化中的第一步。

分层更改

Atom新的缓冲区表示的关键思想是将缓冲区的内容分为两个主要的状态。首先,有一个基本文本,它对应于最近读取或写入磁盘的文档版本。基本的文本是不可变的,并存储在连续分配的单个内存块中。而叠加在基本文本上面的是未保存的更改,它们存储在称为Patch(补丁)的单独的稀疏数据结构中。为了记录编辑,而不是将缓冲区的全部内容移动到内存中,只需对这个Patch进行变更。

实际上在任何时候都可以存在多个Patch(补丁)块。最顶层的Patch(补丁)始终是可变的,但是可以通过冻结最顶层的Patch(补丁)并将新Patch(补丁)推送到堆栈的顶部,来创建当前缓冲区内容的只读快照。将流编辑到这个新Patch(补丁)中,直到不再需要快照,此时最顶层的补丁可以合并到前一层的Patch(补丁)中。

cb138f239169fc2e8d45404fe12e261d.png

要读取缓冲区状态,需要遍历连续的“块”,其中每个块对应于一个分层Patch(补丁)的更改或包含基本文本的数组的切片。

7b5ee4bcadb53b4c4cd8f577bb73abe3.png

Patch(补丁)数据结构

整个系统的核心是Patch(补丁)数据结构,它描述了如何将一系列文本更改应用于某些输入以产生新的输出。它基本上是通过在输入和输出上运行差异来获得相同的信息,但不是通过比较两个缓冲区的内容来构建的,而是通过组合一系列的编辑来逐步构建的。

需要解决的问题

希望更好地了解Patch(补丁)解决的问题,请参考一下这个示例。先从包含xxxx的缓冲区开始,然后执行以下插入:

insert B @ 2 -> xxBxx

insert C @ 4 -> xxBxCx

insert A &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值