Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
[draft] 同期と非同期
seki at druby.org
October 25, 2012
Programming
0
470
[draft] 同期と非同期
札幌Ruby会議でリジェクトされたネタの半分。
seki at druby.org
October 25, 2012
Tweet
Share
More Decks by seki at druby.org
See All by seki at druby.org
Rinda in the real-world embedded systems.
m_seki
0
200
xpjug2019 A-4: チケットシステムの設計と実装、『あのチーム』の運用
m_seki
6
5.7k
Tochigi Ruby Kaigi 08 Keynote
m_seki
0
120
Tochigi RubyKaigi 08 120sec LT
m_seki
0
33
dRuby 20th anniversary hands-on workshop
m_seki
1
44
XP-2018-F-7
m_seki
0
2.2k
Buy it sociably
m_seki
0
84
enlarged: extend your own programming language
m_seki
0
48
Extend your own programming language (RubyKaigi 2018)
m_seki
1
5.4k
Other Decks in Programming
See All in Programming
git on intellij
hiroto_kitamura
0
160
Treasure.map(): Functional programming in JVM-based languages
paranoidmonoid
0
130
Java アプリとAWS の良い関係 - AWS でJava アプリを実行する一番簡単な方法教えます / AWS for Javarista
kanamasa
2
1.1k
Voiceflowではじめる音声アプリ・チャットボット開発〜2022年版〜 / Introduction to Developing Voice Apps & Chatbots with Voiceflow
kun432
0
160
Bootiful multi-model applications with Redis Stack
bsbodden
0
100
エンジニアによる事業指標計測のススメ
doyaaaaaken
1
170
シェーダー氷山発掘記
logilabo
0
140
Android スキルセットをフル活用して始めるスマートテレビアプリ開発
satsukies
0
190
[DC SF 2022] Hitchhiking through Jetpack Compose
jossiwolf
2
150
RFC 9111: HTTP Caching
jxck
0
150
Modern Android Developer ~ 안내서
pluu
1
560
Reactアプリケーションのテスト戦略
0906koki
10
4.5k
Featured
See All Featured
Done Done
chrislema
174
14k
Three Pipe Problems
jasonvnalue
89
8.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
238
11k
4 Signs Your Business is Dying
shpigford
169
20k
Mobile First: as difficult as doing things right
swwweet
213
7.5k
What’s in a name? Adding method to the madness
productmarketing
11
1.6k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Teambox: Starting and Learning
jrom
123
7.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
10
3.3k
Designing for humans not robots
tammielis
241
23k
KATA
mclloyd
7
8.7k
Practical Orchestrator
shlominoach
178
8.6k
Transcript
ಉظͱඇಉظ ඇಉظϓϩάϥϛϯάͱಉظͷϓϩάϥϛϯάͰ͋Δ seki@ruby-lang.org
ྃ෮ؼͱଈ࣌෮ؼ ྃ෮ؼ ओͰ͋Δॲཧ͕ऴΘͬͨΒॲཧ͕Δ ଈ࣌෮ؼ ओͰ͋ΔॲཧΛ࢝ΊͨΒॲཧ͕Δ
ଈ࣌෮ؼΛ͏ͱ͖ Γͬͺͳ͠Ͱͳ͍ ݁Ռʹڵຯ͕͋Δ ඇಉظͷϓϩάϥϛϯάͱಉظΛϓϩάϥ ϛϯά͢Δ͜ͱ
݁Ռͱͷ͖͍ͭ͋ύλʔϯ ͕ࣗՋʹͳͬͨΒɺґཔͨ͠ॲཧΛͭ ͨ͘͞ΜͷґཔΛͭ ॲཧ͕ऴΘͬͨΒ௨ΛΒ͏←᠘͕͋Δʂ
ՋʹͳͬͨΒճऩ͢Δ ॲཧΛґཔ νέοτ͕ฦΔ ฒߦͯࣗ͠ͷࣄΛ͢Δ ࣗͷࣄ͕ऴΘͬͨΒɺґཔͷऴྃΛͭ νέοτΛͬͯͭ
νέοτͷྫ ιέοτͦͷͷ͕νέοτ ґཔΛॻ͖ɺ݁ՌΛಡΉ popenͳͲࣅͨΑ͏ͳͷ ticket = TCPClient.new(...) ticket.write('your task') my_important_task
ticket.read
νέοτͷྫ εϨουνέοτͷΑ͏ʹ͑Δ joinͰ߹ͤͱͷऔಘ͕ҰʹͰ͖ΔΑ ticket = Thread.new { your_task } my_important_task
ticket.join
νέοτͷྫ λϓϧεϖʔεͳΒλϓϧ ticket = Object.new tuple_space.write([:your_task, ticket]) my_important_task tuple_space.take([:your_task_done, ticket])
νέοτͷྫ ֎෦αʔϏεʹॲཧΛґཔ͍ͯ͠߹Θͤν έοτΛΒ͏ͷΑ͋͘Δ ࠷ॳͷ͍߹Θͤྃ෮ؼ͔ͳ ಉظͷ߹ͤʹΑΔඇಉظ ticket = DeluxService.create_task('your task') my_important_task
DeluxService.wait(ticket)
ͨ͘͞Μґཔͯ͠࠷ޙʹͭ ͨ͘͞Μґཔɺͨ͘͞Μճऩ ͻͱͭͷͱ͖ͱຊ࣭తʹมΘΒͳ͍
ͨ͘͞Μґཔͯ͠࠷ޙʹͭ n.times ॲཧΛґཔ νέοτ͕ฦΔ ฒߦͯࣗ͠ͷࣄΛ͢Δ ࣗͷࣄ͕ऴΘͬͨΒɺґཔͷऴྃΛͭ n.times νέοτΛͬͯͭ
ͨ͘͞Μͷॲཧͱࣗͷॲཧ Λฒߦͯ͠܁Γฦ͢ ௨৴ΛؚΉGUIϓϩάϥϛϯάͱ͔ ϞμϯͳΞϓϦέʔγϣϯͰΑ͋͘Δ αʔόαΠυͰଟ͍
ಉ࣌ʹ͍͍ͭͪͨ͘ ͨ͘͞ΜͷνέοτΛͭ ιέοτͳΒselect()ଐ ͳʹ͔ى͖ͨΒԠ͢Δ Δ͜ͱͳ͘ͳͬͨΒνέοτΛͭ
selectଐϝΠϯϧʔϓ select(ͨ͘͞Μͷιέοτ) Ԡ͕͋Γͦ͏ͳιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ
ίʔϧόοΫͷύλʔϯ select(ͨ͘͞Μͷιέοτ) Ԡ͕͋Γͦ͏ͳιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ϑϨʔϜϫʔΫ͕Ӆ͢ ͜ͷลίʔϧόοΫ
ͦͷଞͷଟݩͪ TupleSpaceɺQueueͳͲͷಉظϝΧχζϜͷ ར༻
ॲཧ͕ऴΘͬͨΒ௨ͷ᠘ ͳʹ͔ͯ͠Δ͔ΒɺऴΘͬͨΒڭ͑ͯ͘Ε ͏ΜɻͰɺͲ͏ͬͯʁ
εϨουडಈతʹ௨Λड ͚ΔͷΊΜͲ͏ ࣗͷॲཧΛׂΓࠐΜͰڭ͑ͯΒͬͯ ԠͰ͖ͳ͍ ͕ࣗड͚ೖΕΒΕΔঢ়گ·ͰΓͨ͘ͳ͍ ͨͱ͑γάφϧͰ௨͞Εͯ௨͕͋ͬ ͨ͜ͱΛϝϞͯ҆͠શͳ࣌·ͰԠΒͤΔ ݁ہʮಉ࣌ʹ͍͍ͭͪͨ͘ʯύλʔϯʹ ͳΔ
ΞΫλʔϞσϧ ࣗͷ߹͚ͩͰಈ͘ੈք ͨͩ͠ɺੈքṖͷΤʔςϧͰຬͨ͞Ε͍ͯΔ ͖ͳͱ͖ʹࣗѼͷϝοηʔδΛಡΉ ͖ͳͱ͖ʹͩΕ͔ʹϝοηʔδΛॻ͘ ͩΕ͔ͦͷॠؒଘࡏ͠ͳ͍͜ͱ͋Δ ࣗεϨουϓϩάϥϛϯάͷ͔͠͞Β ղ์͞ΕΔʢ͔ͷΑ͏ʹݟ͑Δʣ
ૈ͘ݴ͏ͱ લड़ͷϝΠϯϧʔϓΛΓ։͍ͨΑ͏ͳײ͡ ʹͳΔ͔ ͋Δ͍ಉ͡Α͏ͳܗʹͳΔ
Τʔςϧ ϝοηʔδͷഔհ ΞΫλʔେͬ͟ͺʹଈ࣌෮ؼ ϝοηʔδͷૹ৴Τʔςϧͱͷྃ෮ؼ ड৴Τʔςϧͱಉظͯ͠Δ
݁ہͷͱ͜Ζ ଈ࣌෮ؼΛ࣮ݱ͢Δͷෳͷྃ෮ؼ ྃ෮ؼ͕ͷ͔࣌ؒ͘͢͝͠Εͳ ͍͚Ͳ ඇಉظϓϩάϥϛϯάͱ͍͔ʹಉظ͢Δ͔ ͷϓϩάϥϛϯάͰ͋Δ
RubyͰඇಉظʹॲཧΛґཔ͠ ͍ͨͱ͖Ͳ͏͠Α͏ εϨουʹཔΔ ͍қ͍εϨου ͔͍͍ͬ͜ಉظϝΧχζϜ ֎෦αʔϏεʹґཔ͢Δ ࣮࣭తʹෳճͷಉظ௨৴ͱͳΔ sendࢭ·Δ͠Ͷ
dRubyͷݴ͍༁ Rubyͱಉ͡ RMIΛεϨουͰแΉ ෳͷRMIͰඇಉظ෩ʹॻ͘
Rubyʹඇಉظݺͼग़͕͠ͳ͍ ͷʹࠔΒͳ͍ͷ͓͔͍͠ ଞͷํ๏ͰͰ͖ͯͨͶ RubyʹඇಉظαʔϏεΛՃ͢ΔϥΠϒϥ Ϧ͕࡞ΕΔͷ͔ͩΒͳ͍Μ͡ΌͶʁ
ͳͥdRubyʹඇಉظݺͼग़͠ ͕ͳ͍ͷ͔ ؆୯ɻRubyʹඇಉظݺͼग़͕͠ͳ͍͔Βɻ dRubyRubyͦͬ͘ΓͷRMIͰ͋Δ RubyͰࠔΔ͜ͱࠔΓɺࠔΒͳ͍͜ͱ ࠔΒͳ͍ͷΛࢦ͍ͯ͠Δ