Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlinのcoroutine、async/awaitと同じでしょ?って思ってたけど意外と洗...
Search
takuya kikuchi
October 25, 2019
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlinのcoroutine、async/awaitと同じでしょ?って思ってたけど意外と洗練されててすごいなぁって思った話をさせてほしい
2019-10-25 VALU社内LT資料です
takuya kikuchi
October 25, 2019
More Decks by takuya kikuchi
See All by takuya kikuchi
AIエージェントを支える設計
tkikuchi1002
13
4.9k
「現場で活躍するAIエージェント」を実現するチームと開発プロセス
tkikuchi1002
8
3.2k
20250708_engineering_bd
tkikuchi1002
0
180
Agentic Workflowという選択肢を考える
tkikuchi1002
1
1.9k
生成AI時代のソフトウェアエンジニアが持つべきケイパビリティを考える
tkikuchi1002
8
6.5k
RAGをテーマに考える、LLMの認知アーキテクチャとソフトウェア設計
tkikuchi1002
3
1.9k
生成AIの不確実性と向き合うためのオブジェクト指向設計
tkikuchi1002
3
7.8k
Azure AI SearchとPromptFlowではじめるRAG
tkikuchi1002
2
1.7k
法人向けChatGPTにおける Azure OpenAI Serviceの課題解決の過程と現在
tkikuchi1002
2
2.4k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1033
470k
GraphQLとの向き合い方2022年版
quramy
50
15k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
190
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Optimizing for Happiness
mojombo
378
71k
Transcript
,PUMJOͷDPSPVUJOFɺBTZODBXBJUͱಉ ͡Ͱ͠ΐʁͬͯࢥ͚ͬͯͨͲҙ֎ͱચ࿅ ͞Ε͍ͯͯ͢͝ͳ͊ͬͯࢥͬͨΛͤ͞ ͯ΄͍͠ 5BLVZB,JLVDIJ
༰ w $Ͱ͓ͳ͡ΈͷBTZODBXBJUʹ͋ͨΔͷ͕,PUMJOͰ ͑ΔΑ͏ʹͳͬͯخ͍͠ͳ w ,PUMJOͷDPSPVUJOFɺจ๏͕ͪΐͬͱચ࿅͞Εͯͯૉఢ ͩͳͬͯࢥͬͨ w ʮؒҧ͍ʹ͍͘ʢFSSPSQSPOFͰͳ͍ʣʯจ๏ʹͯ͋͠ ΔɺͬͯυΩϡϝϯτʹ܁Γฦ͠ॻ͍ͯ͋Δɻ͖
BTZODBXBJU $ private static async Task<int> HeavyWork() { // ͳΜ͔͍͢͝ॏ͍ͨॲཧ
await Task.Delay(1000); Console.WriteLine("done!"); return 0; } static void Main(string[] args) { Task.Run(async () => { await HeavyWork(); await HeavyWork(); await HeavyWork(); }).Wait(); } > done! done! done!
,PUMJODPSPVUJOF suspend fun heavyWork(): Int { /// ॏ͍ॲཧ sleep(1000) println("done!")
return 0 } fun main() { GlobalScope.launch { heavyWork() heavyWork() heavyWork() } } > done! done! done!
ݟൺͯΈΔ private static async Task<int> HeavyWork() { // ͳΜ͔͍͢͝ॏ͍ͨॲཧ await
Task.Delay(1000); Console.WriteLine("done!"); return 0; } static void Main(string[] args) { Task.Run(async () => { await HeavyWork(); await HeavyWork(); await HeavyWork(); }).Wait(); } suspend fun heavyWork(): Int { /// ॏ͍ॲཧ sleep(1000) println("done!") return 0 } fun main() { GlobalScope.launch { heavyWork() heavyWork() heavyWork() } }
ݟൺͯΈΔ private static async Task<int> HeavyWork() { // ͳΜ͔͍͢͝ॏ͍ͨॲཧ await
Task.Delay(1000); Console.WriteLine("done!"); return 0; } static void Main(string[] args) { Task.Run(async () => { await HeavyWork(); await HeavyWork(); await HeavyWork(); }).Wait(); } suspend fun heavyWork(): Int { /// ॏ͍ॲཧ sleep(1000) println("done!") return 0 } fun main() { GlobalScope.launch { heavyWork() heavyWork() heavyWork() } }
ͬ͘͟Γͨ͠ϧʔϧ w BTZODBXBJUʢ$ʣ w ඇಉظ࣮ߦ͍ͨؔ͠5BTL5Λฦ͢Α͏ʹ࣮͢Δ w BTZODؔඞͣ5BTL5ܕΛฦ͢ w BTZODؔͰͷΈɺ5BTL5ΛBXBJUՄೳ w
BXBJU͠ͳ͔ͬͨ߹ɺ'JSF'PSHFU w DPSPVUJOF LPUMJO w ඇಉظ࣮ߦ͍ͨؔ͠TVTQFOEGVODUJPOʢதஅؔʣͱͯ͠ఆٛ͢Δ w TVTQFOEGVODUJPOͷΓͷܕʹറΓͳ͠ w TVTQFOEGVODUJPOɺTVTQFOEGVODUJPO෦ͰͷΈݺͼग़ͤΔ private static async Task<int> HeavyWork() { // ͳΜ͔͍͢͝ॏ͍ͨॲཧ await Task.Delay(1000); Console.WriteLine("done!"); return 0; } static void Main(string[] args) { Task.Run(async () => { await HeavyWork(); await HeavyWork(); await HeavyWork(); }).Wait(); } suspend fun heavyWork(): Int { /// ॏ͍ॲཧ sleep(1000) println("done!") return 0 } fun main() { GlobalScope.launch { heavyWork() heavyWork() heavyWork() } }
BTZODBXBJUͰ͋Γ͕ͪͳࣄނ w BXBJU͠Ε w BTZODؔ֎ͰɺBXBJUͳ͠ͳΒݺͪΌ͏ w ҙຯΛΑ͘ཧղͤͣʹίʔυॻ͍ͯͨΓ͢ΔͱΓ͕ͪ w େࣄނΔ static
void Main(string[] args) { Task.Run(async () => { HeavyWork(); HeavyWork(); HeavyWork(); }).Wait(); } static void Main(string[] args) { HeavyWork(); HeavyWork(); HeavyWork(); }
ҰํLPUMJOͰ w TVTQFOEGVODUJPOΛɺඇTVTQFOEGVODUJPO͔Β ݺͼग़ͦ͏ͱ͢ΔͱίϯύΠϧΤϥʔͩΑ
w $͍͍͚Ͳ,PUMJOΑ͍ w ޙൃڧ͍