SlideShare une entreprise Scribd logo
© 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

ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
Tsuyoshi Ushio
 
Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法
Toru Makabe
 

Tendances (20)

Power Automate for desktopで安定してフローを実行するためのちょっとしたTips
Power Automate for desktopで安定してフローを実行するためのちょっとしたTipsPower Automate for desktopで安定してフローを実行するためのちょっとしたTips
Power Automate for desktopで安定してフローを実行するためのちょっとしたTips
 
OutSystems ユーザー会 セッション資料
OutSystems ユーザー会 セッション資料OutSystems ユーザー会 セッション資料
OutSystems ユーザー会 セッション資料
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
 
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
 
経営のアジリティを支えるDevOpsと組織
経営のアジリティを支えるDevOpsと組織経営のアジリティを支えるDevOpsと組織
経営のアジリティを支えるDevOpsと組織
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
 
綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニック綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニック
 
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディングオタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
Microsoft Graph完全に理解した気がしてた
Microsoft Graph完全に理解した気がしてたMicrosoft Graph完全に理解した気がしてた
Microsoft Graph完全に理解した気がしてた
 
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
 
今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法
 
大企業のアジャイル導入で本質的に変えるべきこと - Agile Japan2021
大企業のアジャイル導入で本質的に変えるべきこと - Agile Japan2021大企業のアジャイル導入で本質的に変えるべきこと - Agile Japan2021
大企業のアジャイル導入で本質的に変えるべきこと - Agile Japan2021
 

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

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Dernier (10)

Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

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