- 后端
- 并发编程
- 分布式
【免费下载链接】cactor
导读
本指南以 CActor 官方入门文档为主线,面向希望用仓颉(Cangjie)语言编写高性能并发程序的开发者,完整覆盖环境准备、项目构建、Hello World Actor 编写、核心特性演示(Ask 模式、集群分片、持久化、流处理、状态机)与运行时性能调优配置。读完本文,你将能够独立搭建 CActor 开发环境、运行内置示例,并写出第一个可用的 Actor 应用。
一、环境准备
1.1 系统要求
在开始之前,请确认你的开发环境满足以下最低要求:
| 项目 | 要求 |
|---|---|
| 仓颉语言版本 | 0.53.4 或更高(当前仓库 cjpm.toml 中cjc-version为0.60.5) |
| 操作系统 | macOS、Linux、Windows |
| 内存 | 建议 4 GB 及以上 |
| CPU | 支持多核处理器(用于调度器多线程与工作窃取) |
提示:CActor 的运行时在 cjpm.toml 中为不同包配置了
static/dynamic/executable三种输出类型,例如核心层(cactor.core.*)以静态库链接,运行时层与示例以动态库/可执行程序构建,这要求编译工具链与仓库配置一致。
1.2 安装仓颉语言
请参照仓颉官方文档安装仓颉语言环境。安装完成后,通过以下命令验证工具链是否就绪:
cangjie --version cjpm --version其中cjpm(Cangjie Package Manager)随仓颉 SDK 一同分发。两条命令都能正常输出版本号,说明环境可用。
二、项目搭建
2.1 克隆项目
git clone https://gitcode.com/Cangjie-SIG/cactor.git cd cactor2.2 构建项目
# 构建全部组件(核心库、运行时、示例、测试) cjpm build # 确认构建成功 echo "Build completed successfully!"cjpm build会按照 cjpm.toml 中的包配置依次编译 Foundation、Core、Runtime、Patterns、Distribution、API 等各层模块,并生成全部可执行的示例程序。
2.3 运行测试
# 运行完整测试套件 cjpm test # 运行 Hello World 示例 cjpm run --name cactor.examples.hello_world_demo测试套件覆盖单元测试(如 actor 测试)与集成测试(如 actor_system_integration_test.cj),可用来验证安装与构建的正确性。
三、第一个 Actor 程序
3.1 Hello World 示例
下面是最简的 CActor 程序,它定义了一个HelloWorldActor,向其中发送三条字符串消息,最后优雅关闭系统:
import cactor.api.{CActor} import cactor.core.actor.{Actor} import cactor.core.message.{Message, StringMessage, MessageResult} import cactor.core.context.{ActorContext} // 定义一个简单的 Actor class HelloWorldActor <: Actor { private var messageCount: Int64 = 0 public prop name: String { get() { "HelloWorldActor" } } public prop description: String { get() { "Hello World Actor example" } } public func receive(message: Message, context: ActorContext): MessageResult { match (message) { case msg: StringMessage => messageCount += 1 println("Received message #${messageCount}: ${msg.getContent()}") MessageResult.Handled case _ => MessageResult.Unhandled } } public func preStart(): Unit { println("Hello World Actor started!") } public func postStop(): Unit { println("Hello World Actor stopped! Processed ${messageCount} messages total") } } // 主程序 func main(): Unit { // 创建 Actor 系统 let system = CActor.system("hello-world") // 创建 Actor let helloActor = system.actorOf(() => HelloWorldActor(), "hello") // 发送消息 helloActor.tell(StringMessage("Hello, CActor!")) helloActor.tell(StringMessage("This is the second message")) helloActor.tell(StringMessage("Welcome to CActor!")) // 等待处理完成 Thread.sleep(Duration.fromMilliseconds(100)) // 关闭系统 system.shutdown() }代码要点逐行拆解如下:
CActor.system("hello-world"):创建名为hello-world的 Actor 系统。CActor是统一 API 入口(见 src/api/cactor.cj),其system()方法内部通过CActorSystemFactory.create(name)创建运行时(见 cactor_system_api.cj)。system.actorOf(() => HelloWorldActor(), "hello"):以() -> Actor工厂函数注册 Actor 实例,actorOf内部经PropsFactory.create(creator)构造Props后交由运行时创建(参考 cactor_system_api.cj)。receive(message, context):Actor 处理消息的唯一入口,返回MessageResult枚举中的Handled/Unhandled/Stop/Restart/Escalate之一。MessageResult定义见 src/core/message/message.cj。StringMessage:内置的用户消息类型,携带字符串内容,通过getContent()读取;同文件还提供PingMessage、PongMessage、StopMessage等内置消息(见 message.cj)。- 生命周期钩子:
preStart()在 Actor 开始处理消息前调用,postStop()在 Actor 完全停止后调用。Actor 接口还定义了postStart()、preStop()、preRestart(reason)、postRestart(reason)等钩子,见 src/core/actor/actor.cj。
仓库中的完整可运行版本比上述示例更丰富:它还演示了第二个
GreeterActor、PingMessage交互、按消息内容分流的响应逻辑,以及使用MessageResult.Stop触发 Actor 停止的写法,见 src/examples/hello_world_demo/main.cj。
3.2 运行程序
cjpm run --name cactor.examples.hello_world_demo预期输出(基本示例版):
Hello World Actor started! Received message #1: Hello, CActor! Received message #2: This is the second message Received message #3: Welcome to CActor! Hello World Actor stopped! Processed 3 messages total四、核心特性示例
CActor 在src/examples/下提供了多个可直接运行的功能演示,统一通过cjpm run --name <包名>执行。
4.1 Ask 模式(请求-响应)
cjpm run --name cactor.examples.ask_demo演示内容:
- 同步与异步请求
- 超时处理
- 批量请求
- 性能基准:文档记录的演示吞吐量约为 657,894 req/s
Ask 模式对应实现位于cactor.patterns.ask包(ask_pattern.cj)。示例代码中AskTestActor通过AskMessage携带原始消息与replyTo引用,处理完成后用AskResponse回传(见 ask_demo/main.cj),这体现了"请求-响应"的完整闭环。
4.2 集群分片
cjpm run --name cactor.examples.cluster_sharding_demo演示内容:
- 集群分片协调(
ShardCoordinator) - 多种路由策略(
ClusterRouter、RoutingStrategy) - 负载均衡(
ClusterLoadBalancer、LeastShardsAllocationStrategy) - 支持大规模 Actor 集群(文档记录为 100 万级 Actor)
该示例依次验证集群状态管理、分片协调器、分片区域(ShardRegion)与完整分片流程,见 cluster_sharding_demo/main.cj;相关实现位于 src/distribution/cluster/。
4.3 持久化系统
cjpm run --name cactor.examples.persistence_demo演示内容:
- 事件溯源(Event Sourcing)
- 状态快照(Snapshot)
- CQRS 架构(命令/查询分离)
- 多种存储后端(
MemoryEventStore、MemorySnapshotStore等)
示例覆盖基础事件存储、快照存储、增强事件存储、CQRS 总线、PersistentCounterActor等测试项,见 persistence_demo/main.cj;实现位于 src/distribution/persistence/。
4.4 流处理
cjpm run --name cactor.examples.streams_demo演示内容:
- 高性能流处理(
StreamFactory、StreamBuilder、SimpleStream) - 背压控制(
BackpressureMessage、Demand、OverflowStrategy) - 丰富的算子集合
- 性能基准:文档记录的演示吞吐量约为 500 万元素/秒
示例涵盖流元素、流消息协议、简化流处理、背压、流组合与 DSL,见 streams_demo/main.cj;核心接口位于 src/streams/core/。
4.5 状态机(XState)
cjpm run --name cactor.examples.xstate_demo演示内容:
- 强类型状态机(
StateMachineDefinition、StateMachineBuilder) - 模式匹配引擎(
PatternTransitionEngine) - 与 CActor 的深度集成(
StateMachineActorFactory) - 文档记录的纳秒级状态转换
示例按核心功能、Actor 集成、DSL 支持、性能测试四个维度组织,见 xstate_demo/comprehensive_demo.cj;实现位于 src/xstate/。
五、常见配置
5.1 Actor 系统配置
// 创建生产级配置 let config = CActorRuntimeConfig.createProduction() // 使用配置创建 Actor 系统 let system = CActor.system("MySystem", config)从源码看,CActorRuntimeConfig是运行时的核心配置结构体(见 src/runtime/cactor_runtime.cj),其内置了多种预设配置工厂:
| 工厂方法 | 邮箱策略 | 调度器 | 适用场景 |
|---|---|---|---|
createDefault() | 无界邮箱 | 线程池调度器 | 通用默认 |
createProduction() | 有界邮箱(容量 10000) | 工作窃取调度器 | 生产环境(启用监控与持久化) |
createExtreme() | 无界邮箱 | 工作窃取调度器 | 极致吞吐 |
createMemoryOptimized() | 有界邮箱(容量 1000) | 线程池调度器 | 内存敏感场景 |
createLowLatency() | 无界邮箱 | 固定线程调度器 | 低延迟场景 |
createHighThroughput() | 无界邮箱 | 工作窃取调度器 | 高吞吐场景 |
5.2 性能调优配置
// 高性能配置 let config = CActorRuntimeConfig.createProduction() .withDispatcherThreads(8) .withMailboxCapacity(10000) .withBatchSize(100) let system = CActor.system("HighPerformanceSystem", config)5.3 配置项参考
| 配置项 | 默认值 | 说明 |
|---|---|---|
dispatcherThreads | 4 | 调度器工作线程数 |
mailboxCapacity | 1000 | 每个 Actor 邮箱的最大容量 |
batchSize | 32 | 每批处理的消息条数 |
源码层面的补充说明:上述参数最终映射到 src/runtime/system/high_performance_actor_system.cj 中HighPerformanceActorSystemConfig的字段workerThreads、mailboxCapacity、batchSize。其默认配置实际为:workerThreads=8、mailboxCapacity=1024、batchSize=32,同时还有contextPoolSize(上下文对象池大小)、maxActors(最大 Actor 数)、enableBatchProcessing、enableMemoryOptimization等字段。此外 src/api/config/config_factories.cj 提供了更细粒度的邮箱(MailboxConfig.bounded/priority/ringBuffer/batching)、调度器(DispatcherConfig.threadPool/workStealing/pinned/callingThread)与监督策略(SupervisionConfig.restart/stop/escalate/resume)工厂方法,可按需组合后通过actorOfWithMailbox/actorOfWithDispatcher/actorOfConfigured应用到单个 Actor。
调优建议(配合 性能指南 阅读):
- 高吞吐场景:采用无界邮箱 + 大
batchSize,减少调度开销; - 内存敏感场景:使用有界邮箱并调小
mailboxCapacity,防止消息积压导致 OOM; - 优先级消息场景:启用优先级邮箱,保证系统消息(默认优先级 1000)优先于用户消息(默认优先级 0)处理;
- 低延迟场景:可关闭批处理,避免为等待凑批而引入延迟。
六、学习路径
6.1 新手路径
如果你刚开始接触 Actor 模型或 CActor:
- Hello World—— 了解基本 Actor 概念与生命周期(hello_world_demo)
- API Demo—— 掌握 CActor API 用法与消息传递(api_demo)
- Benchmark Demo—— 学习性能测试与性能剖析(benchmark_demo)
6.2 进阶路径
在掌握基础后继续深入:
- Ask Pattern—— 请求-响应通信(ask_demo)
- Typed Actor—— 类型安全的 Actor 定义(typed_actor_demo)
- Advanced Dispatcher—— 自定义调度器配置(advanced_dispatcher_examples)
6.3 专家路径
面向分布式系统与高级特性:
- Cluster Sharding—— 分布式 Actor 管理(cluster_sharding_demo)
- Persistence—— 事件溯源与 CQRS(persistence_demo)
- Streams—— 响应式流处理(streams_demo)
- XState—— 状态机集成(xstate_demo)
七、开发工具
7.1 常用构建命令
# 完整构建 cjpm build # 清理后重建 cjpm clean && cjpm build # 运行指定示例 cjpm run --name <example-name>7.2 调试与性能
# 开启详细日志 export CACTOR_LOG_LEVEL=DEBUG # 运行性能基准 cjpm run --name cactor.examples.benchmark_demo注:
CACTOR_LOG_LEVEL为入门文档记录的日志开关环境变量,如需更细粒度的监控与性能数据,可进一步阅读 监控指南 与 性能指南。
7.3 可用示例一览
所有示例均可通过cjpm run --name <名称>运行,源码统一位于src/examples/(可用ls src/examples/浏览):
| 示例 | 包名 |
|---|---|
| Hello World | cactor.examples.hello_world_demo |
| Ask Pattern | cactor.examples.ask_demo |
| Cluster Sharding | cactor.examples.cluster_sharding_demo |
| Persistence | cactor.examples.persistence_demo |
| Streams | cactor.examples.streams_demo |
| State Machine | cactor.examples.xstate_demo |
| Benchmark | cactor.examples.benchmark_demo |
| API Demo | cactor.examples.api_demo |
八、相关资源
8.1 文档
- API 参考
- 架构指南
- 性能指南
- 功能概览
- 最佳实践
- 文档中心
8.2 扩展阅读
- 部署指南
- 监控指南
- 故障排查
- 安全说明
九、常见问题(FAQ)
9.1 如何提升 Actor 性能?
使用批量消息处理、合理设置邮箱容量、选择适配负载的调度器,并针对工作负载调整batchSize参数。可参考本文"常见配置"一节以及 性能指南。
9.2 如何处理 Actor 故障?
使用监督策略(SupervisionConfig.restart等)、配置重启策略并实现故障隔离。CActor 内置了监督者层级(system/user guardian,见 runtime/guardian/),可构建弹性系统。
9.3 如何扩展到多节点?
使用集群分片功能并配置集群路由策略,参考上文"集群分片"示例(cluster_sharding_demo)中的完整演示。
9.4 需要什么仓颉版本?
仓颉 0.53.4 或更高版本,用cangjie --version确认版本号。
9.5 在哪里可以找到更多示例?
所有示例均位于src/examples/目录,运行ls src/examples/浏览全部示例,或查阅 功能概览 获取完整清单。
至此,你已经掌握了 CActor 从环境搭建到第一个 Actor 程序、再到核心特性与性能调优的完整路径。下一步,可以直接在src/examples/中挑选感兴趣的示例运行,或参照 架构指南 深入理解其分层设计。
- 后端
- 并发编程
- 分布式
【免费下载链接】cactor
相关推荐
CActor 快速开始指南:在仓颉语言中构建你的第一个 Actor 系统
CActor 快速开始指南:在仓颉语言中构建你的第一个 Actor 系统 本篇指南以 CActor 开源仓库的 docs/en/QUICK_START.md h
后端并发编程分布式CActor 快速开始实战指南:用仓颉语言构建你的第一个 Actor 应用
CActor 快速开始实战指南:用仓颉语言构建你的第一个 Actor 应用 本篇指南面向首次接触 CActor 的仓颉(Cangjie)开发者,基于 docs/
后端并发编程分布式4个硬指标筛出横盘蓄势股:用Sequoia-X跑通高而窄旗形策略
4个硬指标筛出横盘蓄势股:用Sequoia X跑通高而窄旗形策略 你追高三连板被套,割肉10%它横盘十天再破位——主升浪前的停顿,是手动选股最扎心的场景。开源项
金融科技数据分析
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考