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
620
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
480
ERB, ancient and future
m_seki
3
910
ERB Hacks
m_seki
1
1.5k
わりこまれるはなし
m_seki
0
900
ぼくのかんがえたさいきょうのけいやくによるプログラミング
m_seki
2
1.3k
Learn Ractor
m_seki
1
2.7k
How many copies did you buy the first print?
m_seki
1
1.1k
Create my own search engine.
m_seki
1
5.4k
Other Decks in Programming
See All in Programming
兎に角、コードレビュー
mitohato14
0
150
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
150
AHC051解法紹介
eijirou
0
620
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
210
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
330
ワープロって実は計算機で
pepepper
2
1.4k
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
600
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.3k
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
470
画像コンペでのベースラインモデルの育て方
tattaka
3
1.9k
【第4回】関東Kaggler会「Kaggleは執筆に役立つ」
mipypf
0
840
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
580
Featured
See All Featured
Side Projects
sachag
455
43k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Building Applications with DynamoDB
mza
96
6.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
BBQ
matthewcrist
89
9.8k
GitHub's CSS Performance
jonrohan
1031
460k
Speed Design
sergeychernyshev
32
1.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
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ͰࠔΔ͜ͱࠔΓɺࠔΒͳ͍͜ͱ ࠔΒͳ͍ͷΛࢦ͍ͯ͠Δ