Hi 游客

更多精彩,请登录!

比特池塘 区块链茶馆 正文

NEO-CLI2.9.0版本中采用了actor模型

浩宇洗化公司
67 0 0
NEO创始人兼核心开发者张铮文最近发布了NEO-CLI的2.9.0版本。 NEO-CLI客户端是NEO完整节点,这意味着它将直接与NEO区块链同步并存储完整副本。虽然它可以用作基本钱包客户端,但它更常用于运行与网络上其他节点通信的RPC或共识节点。
NEO-CLI更改日志记录了客户端发布中的所有重要更改。最新版本的添加、更改和修复内容包括以下:
添加:
•        新的RPC命令:getblockheader
•        新的RPC命令:getwalletheight
•        允许修改钱包索引目录的位置
更改:
•        显着的稳定性改进(Actor模型)
•        改进的插件系统
修复:
•        NEO-CLI将在^ D上关闭而不会出现错误(仅限Linux)

Actor模型

在面向对象的编程中,称为对象的组件可以使用一组已知的函数指令修改内部数据。当一个对象调用一个函数并将数据传递给该函数时,该对象将执行该函数中包含的指令集。
如果方法是同步调用,调用者将程序的控制权转移到该对象,并等待结果。假设有任何结果,一旦对象完成了该函数的执行,它将把控制权与结果一起传递回调用者。
如果所有函数都是同步调用的,那么只有一个执行线程。状态将以一致的方式更改,因为这些函数是一个接一个地执行的。
在诸如NEO的多线程系统中,调用者不会将程序的控制权交给对象。这可能导致调用多个对象的情况,这两个对象(在后台执行)都试图同时访问系统中的另一个项目。在此示例中,需要一个解决方案,允许两个对象访问共享项目,当一个尝试从中读取时,另一个也没有被破坏掉。
为了解决这个问题,这些系统可能会使用锁来防止对象访问特定项目,直到执行完成。在锁定期间,如果一个对象正在写入,则在写入完成之前,将阻止其他对象读取数据。虽然这可以确保状态不会随意更改,但它也会限制网络的性能和并发性,因为对象需要等待线程再次可访问(俗称锁竞争)。

在actor模型中,对象表现为在彼此之间传递消息的actor。如果调用了一个函数,则actor会将该函数请求作为消息传递给另一个actor。收件人actor可以执行该函数,然后将结果作为另一个消息传递。由于共享项目只能由一个actor访问,因此一次只有一个actor可以更改该数据的状态。这意味着不需要全局锁,但仍可以使用该actor类中的本地锁。

每个actor都有一个可以填充请求进程的邮箱。然后,actor按顺序读取队列,一次只处理一个任务。这样效率更高,并且允许系统更多并发,因为不同的参与者可以同时处理不同的任务而没有因为锁定造成延迟。

张铮文基于Java / Scala actor模型框架Akka的.NET端口提出了对NEO的代码重构。NEO-CLI v2.9.0是第一个使用actor模型的NEO客户端,预计会大大提高网络的稳定性。这些改进可以为未来更大的块或更短的块时间提供基础,这两者都将使NEO能够解锁更多dBFT的潜在可扩展性。

未来的改进

NEO开发者关注共识的下一个目标之一是优化共识同步时间。NeoResearch的Vitor Coelho发布了类似于Kalman Filter的实现方案,该方案允许作为发言人的共识节点利用其先前共识轮次的经验来更好地定义下一轮共识的时间框架。

更紧迫的变化是重新引入第三个共识阶段。省略共识的第三个“提交”阶段为NEO网络遇到单个分组分叉创造了一个小机会。Red4Sec和City of Zion成员Shargon已经提出了第三阶段共识的提案,该提案将防止这种情况在未来发生。但目前正在讨论探索需要消除的潜在攻击媒介。一个示例是在第二阶段从其他共识节点收集足够的签名之后通过分发块来手动绕过提交阶段的不诚实节点。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

浩宇洗化公司 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8