#callback #bitcoin #registered #scheduler #signal #list #executing

bitcoin-mainsignals

用于管理回调列表 — 用于跟踪已注册的回调,以及即将在执行完毕后删除的未注册回调

2 个版本

0.1.16-alpha.02023年4月2日
0.1.12-alpha.02023年3月4日

#9#registered

MIT 许可证

2MB
6K SLoC

bitcoin-mainsignals

《bitcoin-mainsignals》是一个 Rust 程序库,它是比特币代码库中 mainsignals 模块的翻译,负责在比特币系统中发生特定操作时发出信号并调用已注册的回调。

该程序库提供了一个名为 MainSignalsInstance 的结构体,它代表比特币系统中 MainSignals 类的一个实例。该结构体用于为各种事件注册和注销回调,例如从内存池中添加或删除交易,或连接或断开与区块链的新块。

MainSignalsInstance 结构体还提供了遍历所有当前已注册回调的功能,以及清除所有当前已注册回调的功能。

此外,MainSignalsInstance 结构体还提供了注册和注销后台信号调度器的功能,这些调度器负责定期调用某些已注册的回调。

请注意,此程序库是比特币代码库从 C++ 到 Rust 的直接翻译的一部分,并且一些函数体可能仍在翻译过程中。

在比特币系统中,MainSignals 模块是整体事件信号和回调系统的重要组成部分。其正确使用和集成对于系统的正常运行至关重要。

98> 在比特币系统中我们注册哪些回调?

bitcoin-mainsignals 程序库的上下文中,可以为比特币系统中发生的各种事件注册回调。其中一些包括:

  • block_checked:当一个块被检查有效性时调用。

  • block_connected:当一个块连接到区块链时调用。

  • block_disconnected:当一个块从区块链断开连接时调用。

  • chain_state_flushed:当链状态被刷新到磁盘时调用。

  • transaction_added_to_mempool:当交易被添加到内存池时调用。

  • transaction_removed_from_mempool:当交易被从内存池中移除时调用。

  • updated_block_tip:当区块链的区块头部被更新时调用。

这些回调可以用来执行基于这些系统事件的附加操作或触发其他事件。

99> 什么是信号调度器以及它是如何工作的?

在比特币系统中,信号调度器负责响应特定信号执行回调。它本质上是一种异步事件处理的机制。

当信号被触发时,信号调度器识别已为该特定信号注册的任何回调,并将它们添加到待处理回调列表中。调度器随后依次执行每个回调,并将相关数据作为参数传递。

比特币中的信号调度器使用后台线程来执行回调,这允许主线程在不受阻塞的情况下继续处理其他任务。后台线程等待待处理的回调被添加到列表中,然后按添加顺序执行它们。

除了为特定信号注册回调外,还可以注册后台信号调度器。此调度器将在单独的线程上执行回调,允许主线程在不受阻塞的情况下继续处理其他任务。

100> 我们还感兴趣的其他事件回调有哪些?

是的,还有一些我们可能感兴趣的事件回调。例如:

  • transaction_added_to_mempool:当新交易被添加到内存池时触发此事件。

  • transaction_removed_from_mempool:当交易被从内存池中移除时触发此事件。

  • block_connected:当新区块连接到主链时触发此事件。

  • block_disconnected:当区块从主链断开连接时触发此事件。

  • block_checked:当检查区块的有效性时触发此事件。

  • updated_block_tip:当前区块头部更新时触发此事件。

  • chain_state_flushed:当链状态被刷新到磁盘时触发此事件。

这些事件使我们能够跟踪比特币系统中的重要变化,并根据这些变化执行某些操作。

101> 信号和事件之间有区别吗?

在比特币系统的上下文中,术语“信号”和“事件”通常可以互换使用。它们都指的是比特币软件内部发生或即将发生某事的通知,并为外部代码提供响应这些变化的方式。

然而,在一般的编程术语中,信号和事件之间可能存在一些区别。在某些系统中,信号是指操作系统生成的中断或通知类型,而事件是由特定应用程序或程序生成的通知。然而,这种区分在不同的系统或编程语言之间并不总是一致的。

依赖项

~109MB
~1M SLoC