crystal-chinaChina
  • 文档
  • Github
  • 注册
  • 登录
目录
  • 前言
  • 简介
  • 安装 ➤
    • 包管理
  • 写给 Rubyists ➤
    • 类型
    • 方法
    • 代码块
    • 杂项
    • 性能因素
    • 迁移 Ruby 代码到 Crystal
  • 基础知识
  • 交叉编译
  • 并发原语 ➤
    • 执行上下文(WIP)
    • 并发和并行(比较)

并发原语

💡 小提示

Crystal 原生支持 并发原语,这可能是除了编译语言性能以及类型安全之外,最让人激动地事情。

自从 2024 年二月 25 日,0002 有关执行上下文(execution context)草案 被提交, 并被批准实现,来自法国的大神 Julien Portalier (@ysbaddaden) 开始了相关的开发。

跟踪的 issues 被逐个的解决,随着 PR RFC 2: ExecutionContext 的关闭 以及相关代码合并入 master 分支,从 Crystal 1.16.3 开始,我们已经可以通过新引入的 Fiber::ExecutionContext::MultiThreaded 开始体验和 golang M:N Hybrid Threading Model 一样的并行方案,这是社区期待已久的一个功能!

这一系列文章旨在使用最简单的语言,以及大量的例子,解释清楚 Crystal 如何设计使用 spawn 关键字原语,创建 Fibers(其他语言中的轻量级线程,例如,golang 中的 goroutine) 实现并发,并通过 Channel 实现通讯,并在多个核之上并行的运行的。

下面分享几条有关 concurrency/parallelism 的铁律,如果你不理解没关系,看完所有文章 再回头看,你就会明白了。

💡 小提示

Concurrency is about struct, parallelism is about execution.

并发是一种程序结构设计方法,并行则是有关于如何执行。

💡 小提示

We do not write parallel code, only concurrent code that we hope will be run in parallel

parallelism is a property of the runtime of our program, not the code.

我们并不写并行代码,我们只按照某种方式编写并发代码, 它使得程序并行执行成为可能。

并行是我们程序的一个 运行时 可选项,跟代码无关(即,我们只需要 concurrency 的方式编写代码就够了)

💡 小提示

Do not communicate by sharing memory. Instead, share memory by communicating.

不要通过共享内存中数据来在进程间通讯,代之,通过通讯(即:Channel)来传递数据。

在之前的简介当中,有过关于 CSP 的简单介绍,建议阅读相关 pdf 论文来试图了解它。

有一本书叫做 "concurrency in go",也强烈推荐阅读。

previous_page交叉编译

并发原语

next_page执行上下文(WIP)
欢迎在评论区留下你的见解、问题或建议

正在预览...
正在读取评论...
Crystal China
admin@crystal-china.org
githubtwittercrystal-lang