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
[draft] 同期と非同期
Search
seki at druby.org
October 25, 2012
Programming
0
510
[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
XP, Testing and ninja testing
m_seki
3
220
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
450
ERB, ancient and future
m_seki
3
890
ERB Hacks
m_seki
1
1.5k
わりこまれるはなし
m_seki
0
830
ぼくのかんがえたさいきょうのけいやくによるプログラミング
m_seki
2
1.2k
Learn Ractor
m_seki
1
2.7k
How many copies did you buy the first print?
m_seki
1
740
Create my own search engine.
m_seki
1
5.3k
Other Decks in Programming
See All in Programming
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
510
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
0
100
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
470
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
1
130
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
110
Create a website using Spatial Web
akkeylab
0
310
童醫院敏捷轉型的實踐經驗
cclai999
0
200
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
600
Goで作る、開発・CI環境
sin392
0
180
ニーリーにおけるプロダクトエンジニア
nealle
0
660
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
550
Discover Metal 4
rei315
2
100
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Bash Introduction
62gerente
614
210k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Visualization
eitanlees
146
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Automating Front-end Workflow
addyosmani
1370
200k
Navigating Team Friction
lara
187
15k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
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ͰࠔΔ͜ͱࠔΓɺࠔΒͳ͍͜ͱ ࠔΒͳ͍ͷΛࢦ͍ͯ͠Δ