Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[draft] 同期と非同期

[draft] 同期と非同期

札幌Ruby会議でリジェクトされたネタの半分。

40f4d1f2e77078955bd01e9fb4a503ba?s=128

seki at druby.org

October 25, 2012
Tweet

Transcript

  1. ಉظͱඇಉظ ඇಉظϓϩάϥϛϯάͱ͸ಉظͷϓϩάϥϛϯάͰ͋Δ seki@ruby-lang.org

  2. ׬ྃ෮ؼͱଈ࣌෮ؼ ׬ྃ෮ؼ ओ୊Ͱ͋Δॲཧ͕ऴΘͬͨΒॲཧ͕໭Δ ଈ࣌෮ؼ ओ୊Ͱ͋ΔॲཧΛ࢝ΊͨΒॲཧ͕໭Δ

  3. ଈ࣌෮ؼΛ࢖͏ͱ͖ ΍Γͬͺͳ͠Ͱ͸ͳ͍ ݁Ռʹڵຯ͕͋Δ ඇಉظͷϓϩάϥϛϯάͱ͸ಉظΛϓϩάϥ ϛϯά͢Δ͜ͱ

  4. ݁Ռͱͷ͖͍ͭ͋ύλʔϯ ࣗ෼͕ՋʹͳͬͨΒɺґཔͨ͠ॲཧΛ଴ͭ ͨ͘͞ΜͷґཔΛ଴ͭ ॲཧ͕ऴΘͬͨΒ௨஌Λ΋Β͏←᠘͕͋Δʂ

  5. ՋʹͳͬͨΒճऩ͢Δ ॲཧΛґཔ νέοτ͕ฦΔ ฒߦͯࣗ͠෼ͷ࢓ࣄΛ͢Δ ࣗ෼ͷ࢓ࣄ͕ऴΘͬͨΒɺґཔͷऴྃΛ଴ͭ νέοτΛ࢖ͬͯ଴ͭ

  6. νέοτͷྫ ιέοτͦͷ΋ͷ͕νέοτ ґཔΛॻ͖ɺ݁ՌΛಡΉ popenͳͲ΋ࣅͨΑ͏ͳ΋ͷ ticket = TCPClient.new(...) ticket.write('your task') my_important_task

    ticket.read
  7. νέοτͷྫ εϨου΋νέοτͷΑ͏ʹ࢖͑Δ joinͰ଴߹ͤͱ஋ͷऔಘ͕Ұ౓ʹͰ͖ΔΑ ticket = Thread.new { your_task } my_important_task

    ticket.join
  8. νέοτͷྫ λϓϧεϖʔεͳΒλϓϧ ticket = Object.new tuple_space.write([:your_task, ticket]) my_important_task tuple_space.take([:your_task_done, ticket])

  9. νέοτͷྫ ֎෦αʔϏεʹॲཧΛґཔͯ͠໰͍߹Θͤν έοτΛ΋Β͏ͷ΋Α͋͘Δ ࠷ॳͷ໰͍߹Θͤ͸׬ྃ෮ؼ͔ͳ ಉظͷ૊߹ͤʹΑΔඇಉظ ticket = DeluxService.create_task('your task') my_important_task

    DeluxService.wait(ticket)
  10. ͨ͘͞Μґཔͯ͠࠷ޙʹ଴ͭ ͨ͘͞Μґཔɺͨ͘͞Μճऩ ͻͱͭͷͱ͖ͱຊ࣭తʹมΘΒͳ͍

  11. ͨ͘͞Μґཔͯ͠࠷ޙʹ଴ͭ n.times ॲཧΛґཔ νέοτ͕ฦΔ ฒߦͯࣗ͠෼ͷ࢓ࣄΛ͢Δ ࣗ෼ͷ࢓ࣄ͕ऴΘͬͨΒɺґཔͷऴྃΛ଴ͭ n.times νέοτΛ࢖ͬͯ଴ͭ

  12. ͨ͘͞Μͷॲཧͱࣗ෼ͷॲཧ Λฒߦͯ͠܁Γฦ͢ ௨৴ΛؚΉGUIϓϩάϥϛϯάͱ͔ ϞμϯͳΞϓϦέʔγϣϯͰΑ͋͘Δ αʔόαΠυͰ΋ଟ͍

  13. ಉ࣌ʹ͍ͭ͘΋଴͍ͪͨ ͨ͘͞ΜͷνέοτΛ଴ͭ ιέοτͳΒselect()ଐ ͳʹ͔ى͖ͨΒ൓Ԡ͢Δ ΍Δ͜ͱͳ͘ͳͬͨΒνέοτΛ଴ͭ

  14. selectଐϝΠϯϧʔϓ select(ͨ͘͞Μͷιέοτ) ൓Ԡ͕͋Γͦ͏ͳιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ

  15. ίʔϧόοΫͷύλʔϯ select(ͨ͘͞Μͷιέοτ) ൓Ԡ͕͋Γͦ͏ͳιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ϑϨʔϜϫʔΫ͕Ӆ͢ ͜ͷลίʔϧόοΫ

  16. ͦͷଞͷଟݩ଴ͪ TupleSpaceɺQueueͳͲͷಉظϝΧχζϜͷ ར༻

  17. ॲཧ͕ऴΘͬͨΒ௨஌ͷ᠘ ͳʹ͔ͯ͠Δ͔ΒɺऴΘͬͨΒڭ͑ͯ͘Ε ͏ΜɻͰɺͲ͏΍ͬͯʁ

  18. εϨου͸डಈతʹ௨஌Λड ͚ΔͷΊΜͲ͏ ࣗ෼ͷॲཧΛׂΓࠐΜͰڭ͑ͯ΋Βͬͯ΋൓ ԠͰ͖ͳ͍ ࣗ෼͕ड͚ೖΕΒΕΔঢ়گ·Ͱ஌Γͨ͘ͳ͍ ͨͱ͑͹γάφϧͰ௨஌͞Εͯ΋௨஌͕͋ͬ ͨ͜ͱΛϝϞͯ҆͠શͳ࣌·Ͱ൓Ԡ஗ΒͤΔ ݁ہʮಉ࣌ʹ͍ͭ͘΋଴͍ͪͨʯύλʔϯʹ ͳΔ

  19. ΞΫλʔϞσϧ ࣗ෼ͷ౎߹͚ͩͰಈ͘ੈք ͨͩ͠ɺੈք͸ṖͷΤʔςϧͰຬͨ͞Ε͍ͯΔ ޷͖ͳͱ͖ʹࣗ෼ѼͷϝοηʔδΛಡΉ ޷͖ͳͱ͖ʹͩΕ͔ʹϝοηʔδΛॻ͘ ͩΕ͔͸ͦͷॠؒଘࡏ͠ͳ͍͜ͱ΋͋Δ ࣗ෼͸εϨουϓϩάϥϛϯάͷ೉͔͠͞Β ղ์͞ΕΔʢ͔ͷΑ͏ʹݟ͑Δʣ

  20. ૈ͘ݴ͏ͱ લड़ͷϝΠϯϧʔϓΛ੾Γ։͍ͨΑ͏ͳײ͡ ʹͳΔ͔ ͋Δ͍͸ಉ͡Α͏ͳܗʹͳΔ

  21. Τʔςϧ ϝοηʔδͷഔհ ΞΫλʔ͸େͬ͟ͺʹ͸ଈ࣌෮ؼ ϝοηʔδͷૹ৴͸Τʔςϧͱͷ׬ྃ෮ؼ ड৴΋Τʔςϧͱ͸ಉظͯ͠Δ

  22. ݁ہͷͱ͜Ζ ଈ࣌෮ؼΛ࣮ݱ͢Δͷ͸ෳ਺ͷ׬ྃ෮ؼ ׬ྃ෮ؼ͕΋ͷ͘͢͝୹͔࣌ؒ΋͠Εͳ ͍͚Ͳ ඇಉظϓϩάϥϛϯάͱ͸͍͔ʹಉظ͢Δ͔ ͷϓϩάϥϛϯάͰ͋Δ

  23. RubyͰඇಉظʹॲཧΛґཔ͠ ͍ͨͱ͖͸Ͳ͏͠Α͏ εϨουʹཔΔ ࢖͍қ͍εϨου ͔͍͍ͬ͜ಉظϝΧχζϜ ֎෦αʔϏεʹґཔ͢Δ ࣮࣭తʹෳ਺ճͷಉظ௨৴ͱͳΔ send΋ࢭ·Δ͠Ͷ

  24. dRubyͷݴ͍༁ Rubyͱಉ͡ RMIΛεϨουͰแΉ ෳ਺ͷRMIͰඇಉظ෩ʹॻ͘

  25. Rubyʹඇಉظݺͼग़͕͠ͳ͍ ͷʹࠔΒͳ͍ͷ͸͓͔͍͠ ଞͷํ๏ͰͰ͖ͯͨͶ RubyʹඇಉظαʔϏεΛ௥Ճ͢ΔϥΠϒϥ Ϧ͕࡞ΕΔͷ͔ͩΒ໰୊ͳ͍Μ͡ΌͶʁ

  26. ͳͥdRubyʹඇಉظݺͼग़͠ ͕ͳ͍ͷ͔ ؆୯ɻRubyʹඇಉظݺͼग़͕͠ͳ͍͔Βɻ dRuby͸Rubyͦͬ͘ΓͷRMIͰ͋Δ RubyͰࠔΔ͜ͱ͸ࠔΓɺࠔΒͳ͍͜ͱ͸ ࠔΒͳ͍ͷΛ໨ࢦ͍ͯ͠Δ