SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
© DMM
© DMM
なんとなく理解するActor
Actorと仲良くしよう
野瀬田 裕樹(@ynoseda)
2024/1/29
© DMM
野瀬田 裕樹(@ynoseda)
2023年9月 合同会社DMM.com 中途入社
開発統括本部 アプリ開発室
自己紹介
2
© DMM
3
みなさん、Actor理解してますか?
© DMM
4
私は全然理解できてません(とりあえずMainActorあるある)
© DMM
5
ということで
© DMM
6
今日は私と一緒になんとなくでも理解できるようになりましょう
© DMM
Actorとは
SwiftにおけるActorについてはSwift.orgに記載がある
https://docs.swift.org/swift-book/documentation/the-swift-programmi
ng-language/concurrency/#Actors
7
© DMM
Actorとは
You can use tasks to break up your program into isolated, concurrent
pieces. Tasks are isolated from each other, which is what makes it
safe for them to run at the same time, but sometimes you need to
share some information between tasks. Actors let you safely share
information between concurrent code. Like classes, actors are
reference types, so the comparison of value types and reference
types in Classes Are Reference Types applies to actors as well as
classes. Unlike classes, actors allow only one task to access their
mutable state at a time, which makes it safe for code in multiple tasks
to interact with the same instance of an actor.
8
© DMM
9
読む気にならないですね
© DMM
10
Google翻訳しましょう
© DMM
1. タスクについての記載
● タスクを使うとプログラムを独立していて同時に実行できるパーツに分
割できる
● タスクは分離されていて安全に同時実行できるが、場合によってはタス
ク間で情報を共有する必要がある
Actorとは
11
© DMM
2. Actorについての記載
● アクターを使用すると、安全にタスク間で情報を共有できる
● アクターはクラスと同様に参照型である
● アクターはクラスとは異なり、一度に 1 つのタスクのみが可変状態にア
クセスできる
Actorとは
12
© DMM
13
字面ではわかるがわからん
© DMM
14
そういう時はActorという単語の意味を調べましょう
© DMM
https://www.merriam-webster.com/dictionary/actor
1 : one that acts : DOER
2
a : one who acts in a play, movie, television show, etc.
b : one who behaves as if acting a part
3 : one that takes part in any affair : PARTICIPANT
Actorという単語の意味
15
© DMM
https://www.merriam-webster.com/dictionary/actor
1 : one that acts : DOER
2
a : one who acts in a play, movie, television show, etc.
b : one who behaves as if acting a part
3 : one that takes part in any affair : PARTICIPANT
要するになんらかの行動をするもの、役に従って振る舞うものを表す
Actorという単語の意味
16
© DMM
17
じゃあなぜタスク間で安全に情報を共有できる参照型がActorなのか?
© DMM
A universal modular ACTOR formalism for artificial intelligence
https://www.ijcai.org/Proceedings/73/Papers/027B.pdf
というpaperが初出らしい
プログラミングにおけるActorの初出は?
18
© DMM
このpaperの概要の次に記載されている一文がActorの重要な概念
> Programs should not only work, but they should appear to work as
well.
プログラミングにおけるActorの初出は?
19
© DMM
このpaperの中にActorについての概要が記載されている
> この作業の過程で、私たちは ACTOR という 1 つの基本概念を中心に形
式主義を統一することに成功しました。 直観的には、ACTOR は、スクリプト
に従ってキューの役割を果たすアクティブなエージェントです。モデルにお
ける制御とデータ フローの不可分性を強調するために、ACTOR の比喩を
使用します。
プログラミングにおけるActorの初出は?
20
© DMM
● スクリプトに従ってキューの役割を果たすアクティブなエージェントのこ
と
● どのタイミング・条件でどういった振る舞いをするべきか、つまり制御と
データフローはセットで考えるべきで、それらがセットになったものを
Actorという比喩で表現している
元々のActorとは
21
© DMM
このpaperの中にActorについての性質も記載されている
> 私たちの形式主義は、すべての動作モードが 1 種類の動作、つまり
ACTORにメッセージを送信するという観点からどのように定義できるかを示
しています。 ACTORは、再帰関数、データ構造、またはプロセスとして動作
するかどうかに関係なく、常にまったく同じ方法で均一に呼び出されます。
(中略)すべてのACTORには、メッセージが送信されるACTORの前提条件
とコンテキストが満たされていることを確認する INTENTION があります。
INTENTIONとは、ACTORが外の世界と結ぶ契約です。ACTORが契約をど
のように履行するかは、ACTOR自身の仕事です。
Actorの性質
22
© DMM
Actorの性質
23
全てがActor 統一された呼出 Intension
© DMM
● 全てがActorで表現できる
○ Monotheism is the answer
○ データ構造、関数、セマフォなど多岐にわたる概念を包括している
● 統一された呼び出し方法
○ Actorは内部でどのように振る舞っていたとしても、同じ方法で一貫して呼び出し
される
● Intention(意図)
○ 外の世界とActorの間には契約があり、その契約に従ってActorは振る舞う
元々のActorとは
24
© DMM
https://github.com/apple/swift-evolution/blob/main/proposals/0306-act
ors.md
SE-0306で背景や詳細が確認できる
SwiftにおけるActor
25
© DMM
● 従来のclassにおける課題感
○ データ競合回避が難しい
○ データ競合のような並行処理における不具合を静的に検出できない
SwiftにおけるActor導入の背景
26
© DMM
27
いい感じにデータ競合を回避する方法は何かないか?
© DMM
28
例えばデータのフローと制御をセットで扱って、
データ競合がおきないように
いい感じの条件、タイミングで状態を扱ってくれるような
© DMM
29
あっ、これ
A universal modular ACTOR formalism for artificial intelligence
でやったところだ!
© DMM
● プログラムは単に機能するだけではだめ
● ちゃんと外から見たときに利用側の期待通りに振る舞ってくれるということ
が大切
● Actorはこちらの期待した役をきちんと演じてくれる役者さん
● データ競合がおきないように状態を扱って欲しいなぁの期待に応えてくれ
るのがActor
Actorに対するイメージ
30
© DMM
SwiftにおけるActor
31
© DMM
SwiftにおけるActor
32
© DMM
SwiftにおけるActor
33
© DMM
SwiftにおけるActor
34
© DMM
● Actorはその性質から、警告が出ないようにちゃんと実装すれば基本的
にはデータ競合を防ぐことができるはず
● コンパイラを頼りにActorの使い方を勉強しよう
● Build SettingsのSWIFT_STRICT_CONCURRENCYをcompleteにする
と、モジュール全体にわたってSendableの制約とactor isolationのチェッ
クを強制してくれる
SwiftにおけるActor
35
© DMM
● 送信可能って日本語訳わかりにくいよね
● コピーすることで、ある非同期処理のドメインから別のドメインに渡せるも
の
● 単純な値型で構成されているstructとか、そういうコピーした後に書き込
みしても前のデータに影響しないものが該当する
● Sendableなデータはactor同士のやり取りで使える
Sendableって何?
36
© DMM
発生する警告の例
37
© DMM
発生する警告の例(actor-isolationチェック)
38
© DMM
発生する警告の例(actor-isolationチェック)
39
© DMM
発生する警告の例(actor-isolationチェック)
40
© DMM
発生する警告の例(Sendable制約)
41
© DMM
発生する警告の例(Sendable制約)
42
© DMM
発生する警告の例(キャプチャでも起きるよ)
43
© DMM
発生する警告の例(キャプチャでも起きるよ)
44
© DMM
● Actorと一口にいっても、単なるactorもあればMainActorのように特殊な
Actorもある
● DistributedActor
● GlobalActor
● MainActor
● AnyActor
色んなActor
45
© DMM
● 一番良く使うMainActorくらいは定義を見ておこう
MainActor
46
© DMM
MainActor
47
© DMM
actorはインスタンスが違うと違うactorだよ
48
© DMM
GlobalActor
49
© DMM
● Actorは結構古くからある概念で、元の論文を読むとイメージが掴めるか
も
● Actorというだけで静的にデータ競合を回避できるなんて凄いよね
● コンパイラのサポートを使って上手にデータ競合を回避しよう
まとめ
50
© DMM
ご静聴ありがとうございました
© DMM
Audience Q&A Session
ⓘ
Click Present with Slido or install our Chrome extension to show live Q&A
while presenting.

Contenu connexe

Tendances

契約プログラミング
契約プログラミング契約プログラミング
契約プログラミング
Oda Shinsuke
 

Tendances (20)

ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
契約プログラミング
契約プログラミング契約プログラミング
契約プログラミング
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
分かったうえではじめるCI/CD
分かったうえではじめるCI/CD分かったうえではじめるCI/CD
分かったうえではじめるCI/CD
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみた
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティス
 
Graph Database and Amazon Neptune
Graph Database and Amazon NeptuneGraph Database and Amazon Neptune
Graph Database and Amazon Neptune
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 

Similaire à なんとなく理解するActor 〜Actorと仲良くしよう〜 @DMM.swift #1

Similaire à なんとなく理解するActor 〜Actorと仲良くしよう〜 @DMM.swift #1 (14)

DMM meetup #23 アドプラットフォームグループの取組.pdf
DMM meetup #23  アドプラットフォームグループの取組.pdfDMM meetup #23  アドプラットフォームグループの取組.pdf
DMM meetup #23 アドプラットフォームグループの取組.pdf
 
さよなら満員電車^^Pepperがあればだれでも簡単♪VRテレイグシステムの完全版
さよなら満員電車^^Pepperがあればだれでも簡単♪VRテレイグシステムの完全版さよなら満員電車^^Pepperがあればだれでも簡単♪VRテレイグシステムの完全版
さよなら満員電車^^Pepperがあればだれでも簡単♪VRテレイグシステムの完全版
 
ドコモのクラウドとビックデータJpi版
ドコモのクラウドとビックデータJpi版ドコモのクラウドとビックデータJpi版
ドコモのクラウドとビックデータJpi版
 
プロダクトマネージャーこそプロジェクトマネジメントを学ぼう (2).pdf
プロダクトマネージャーこそプロジェクトマネジメントを学ぼう (2).pdfプロダクトマネージャーこそプロジェクトマネジメントを学ぼう (2).pdf
プロダクトマネージャーこそプロジェクトマネジメントを学ぼう (2).pdf
 
AWS re:Inforce 2019 re:Cap LT
AWS re:Inforce 2019 re:Cap LTAWS re:Inforce 2019 re:Cap LT
AWS re:Inforce 2019 re:Cap LT
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
Developers.io.札幌 xamarinってどうよ
Developers.io.札幌 xamarinってどうよDevelopers.io.札幌 xamarinってどうよ
Developers.io.札幌 xamarinってどうよ
 
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発
 
20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LT20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LT
 
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
 
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
 
DataTable
DataTableDataTable
DataTable
 

Dernier

Dernier (11)

LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

なんとなく理解するActor 〜Actorと仲良くしよう〜 @DMM.swift #1