☰
CActor 仓颉 Actor 系统快速上手:从环境搭建到第一个 Actor 程序
2026/10/14 7:05:46 网站建设 项目流程
  • 后端
  • 并发编程
  • 分布式

【免费下载链接】cactor

项目地址:https://gitcode.com/Cangjie-SIG/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 cactor

2.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 配置项参考

配置项默认值说明
dispatcherThreads4调度器工作线程数
mailboxCapacity1000每个 Actor 邮箱的最大容量
batchSize32每批处理的消息条数

源码层面的补充说明:上述参数最终映射到 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:

  1. Hello World—— 了解基本 Actor 概念与生命周期(hello_world_demo)
  2. API Demo—— 掌握 CActor API 用法与消息传递(api_demo)
  3. Benchmark Demo—— 学习性能测试与性能剖析(benchmark_demo)

6.2 进阶路径

在掌握基础后继续深入:

  1. Ask Pattern—— 请求-响应通信(ask_demo)
  2. Typed Actor—— 类型安全的 Actor 定义(typed_actor_demo)
  3. Advanced Dispatcher—— 自定义调度器配置(advanced_dispatcher_examples)

6.3 专家路径

面向分布式系统与高级特性:

  1. Cluster Sharding—— 分布式 Actor 管理(cluster_sharding_demo)
  2. Persistence—— 事件溯源与 CQRS(persistence_demo)
  3. Streams—— 响应式流处理(streams_demo)
  4. 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 Worldcactor.examples.hello_world_demo
Ask Patterncactor.examples.ask_demo
Cluster Shardingcactor.examples.cluster_sharding_demo
Persistencecactor.examples.persistence_demo
Streamscactor.examples.streams_demo
State Machinecactor.examples.xstate_demo
Benchmarkcactor.examples.benchmark_demo
API Democactor.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

项目地址:https://gitcode.com/Cangjie-SIG/cactor
点击查看免费下载

相关推荐

上一篇:免费快速转换B站缓存视频:m4s-converter完整使用教程
下一篇:音乐解锁终极指南:3步轻松解密加密音乐文件,让音乐自由播放

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询