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 ZOZ5
m_seki
3
920
XP, Testing and ninja testing
m_seki
3
760
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
510
ERB, ancient and future
m_seki
3
940
ERB Hacks
m_seki
1
1.5k
わりこまれるはなし
m_seki
0
940
ぼくのかんがえたさいきょうのけいやくによるプログラミング
m_seki
2
1.4k
Learn Ractor
m_seki
1
2.8k
How many copies did you buy the first print?
m_seki
1
1.1k
Other Decks in Programming
See All in Programming
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
140
NIKKEI Tech Talk#38
cipepser
0
270
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
330
Google Opalで使える37のライブラリ
mickey_kubo
3
150
Ktorで簡単AIアプリケーション
tsukakei
0
110
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
650
CSC509 Lecture 07
javiergs
PRO
0
250
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.2k
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
8.9k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
220
EMこそClaude Codeでコード調査しよう
shibayu36
0
440
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
640
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
Balancing Empowerment & Direction
lara
5
700
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
The Language of Interfaces
destraynor
162
25k
YesSQL, Process and Tooling at Scale
rocio
173
15k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Statistics for Hackers
jakevdp
799
220k
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ͰࠔΔ͜ͱࠔΓɺࠔΒͳ͍͜ͱ ࠔΒͳ͍ͷΛࢦ͍ͯ͠Δ