Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[draft] 同期と非同期
Search
seki at druby.org
October 25, 2012
Programming
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[draft] 同期と非同期
札幌Ruby会議でリジェクトされたネタの半分。
seki at druby.org
October 25, 2012
More Decks by seki at druby.org
See All by seki at druby.org
What We Talk About When We Talk About XP
m_seki
2
810
Programming with a DJ Controller — not vibe coding
m_seki
3
1.4k
Agile Leadership Summit Keynote 2026
m_seki
1
1.8k
RWC2025 Ninja-testing with smart playlist
m_seki
4
1.8k
XP, Testing and ninja testing ZOZ5
m_seki
3
3.1k
XP, Testing and ninja testing
m_seki
3
1.5k
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
610
ERB, ancient and future
m_seki
3
1.1k
ERB Hacks
m_seki
1
1.8k
Other Decks in Programming
See All in Programming
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
ChromeでローカルLLM
ryu1013
0
140
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
310
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Domain-Driven Transformation
hschwentner
2
2.3k
contenteditable と日本語入力に向き合う
colorful12
0
200
ジョジョの世界をXRで再現する
mofurune
0
170
AmebaブログはKMPから卒業します
kmars0605
0
190
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Designing for Performance
lara
612
70k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Code Reviewing Like a Champion
maltzj
529
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Facilitating Awesome Meetings
lara
57
7.2k
Transcript
ಉظͱඇಉظ ඇಉظϓϩάϥϛϯάͱಉظͷϓϩάϥϛϯάͰ͋Δ
[email protected]
ྃ෮ؼͱଈ࣌෮ؼ ྃ෮ؼ ओͰ͋Δॲཧ͕ऴΘͬͨΒॲཧ͕Δ ଈ࣌෮ؼ ओͰ͋ΔॲཧΛ࢝ΊͨΒॲཧ͕Δ
ଈ࣌෮ؼΛ͏ͱ͖ Γͬͺͳ͠Ͱͳ͍ ݁Ռʹڵຯ͕͋Δ ඇಉظͷϓϩάϥϛϯάͱಉظΛϓϩάϥ ϛϯά͢Δ͜ͱ
݁Ռͱͷ͖͍ͭ͋ύλʔϯ ͕ࣗՋʹͳͬͨΒɺґཔͨ͠ॲཧΛͭ ͨ͘͞ΜͷґཔΛͭ ॲཧ͕ऴΘͬͨΒ௨ΛΒ͏←᠘͕͋Δʂ
ՋʹͳͬͨΒճऩ͢Δ ॲཧΛґཔ νέοτ͕ฦΔ ฒߦͯࣗ͠ͷࣄΛ͢Δ ࣗͷࣄ͕ऴΘͬͨΒɺґཔͷऴྃΛͭ νέοτΛͬͯͭ
νέοτͷྫ ιέοτͦͷͷ͕νέοτ ґཔΛॻ͖ɺ݁ՌΛಡΉ 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ͰࠔΔ͜ͱࠔΓɺࠔΒͳ͍͜ͱ ࠔΒͳ͍ͷΛࢦ͍ͯ͠Δ