Slide 1

Slide 1 text

cpmͷ࣮૷ͷཪଆ Shoichi Kaji

Slide 2

Slide 2 text

Me • Shoichi Kaji • CPAN, github: skaji • co-maintainer of
 Minilla, Perl-Build, Text- Xslate, Mouse, Test-PAUSE- Permissions

Slide 3

Slide 3 text

ࠓ೔ͷ໨త • cpmͷ࣮૷ͷࢼߦࡨޡΛ࿩͠ɺ
 ͍Ζ͍Ζͳ΍Γ͔͕ͨ͋Δͱ఻͍͑ͨɻ
 ໘ന͍ͱࢥͬͯ΋Β͑ͨΒɺ͞Βʹ͏Ε͍͠ɻ • Ͳ͏͍͏໰୊͕͔͋ͬͨɺͲΜͳղܾҊ͕͋ͬͨ ͷ͔ɺͳͥͦͷղܾҊΛ࠾༻ͨ͠ͷ͔ • େ఍ɺͳͥͦͷҊΛબΜ͔ͩͱݴΘΕͯ΋ɺ"ͳΜ ͱͳ͘"ͱ͍͏͜ͱ͕ଟ͍͚ΕͲ:)

Slide 4

Slide 4 text

໨࣍ • cpmͱ͸ʁ • CPAN client ߴ଎ԽͷϙΠϯτ(A), (B) • Ͳ͏΍ͬͯ"ͲΜͲΜ"jobΛফԽ͢Δ͔ • jobͷத਎ • ϓϩάϥϜύϥμΠϜ • IPC • select • ࣮ࡍͷcpmͷίʔυ • ࠷ޙʹ

Slide 5

Slide 5 text

cpmͱ͸?

Slide 6

Slide 6 text

cpm is
 a fast CPAN client

Slide 7

Slide 7 text

https://github.com/skaji/cpm

Slide 8

Slide 8 text

CPAN clientΛߴ଎Խ͢Δʹ͸ େ͖͘2ͭͷϙΠϯτ͕͋Δ

Slide 9

Slide 9 text

CPAN clientߴ଎ԽͷϙΠϯτ(A) • Ͳ͏΍ͬͯɺಈతʹܾ·Δ΍Δ΂͖͜ͱ(= job)Λ
 ؅ཧ͢Δ͔ • ͸͡ΊʹΘ͔͍ͬͯΔͷ͸ʮModuleAͷΠϯετʔ ϧʯͱ͍͏ΰʔϧͷΈ • ModuleXͷґଘ͸ModuleXͷMakefile.PLΛ࣮ߦ͠ ͯ͸͡Ίͯ֬ఆ͢Δ • Ͳͷjobʹ͸ґଘؔ܎ʹ͋ΓɺͲͷjob͸ಠཱ͔

Slide 10

Slide 10 text

CPAN clientߴ଎ԽͷϙΠϯτ(B) • Ͳ͏΍ͬͯ"ͲΜͲΜ"jobΛফԽ͢Δ͔ • ࠓ೔͸ͪ͜ΒΛѻ͍͍ͨ

Slide 11

Slide 11 text

job job job job job job job job job Ͳ͏΍ͬͯjobΛ
 "ͲΜͲΜ"ফԽ͢Δ͔

Slide 12

Slide 12 text

jobͷத਎ • ֎෦ίϚϯυ࣮ߦ • perl Makefile.PL • tar xzf Module-0.1.tar.gz • HTTP௨৴ • API͔ΒdisturlΛऔಘ • CPAN͔ΒtarballΛऔಘ job job job job job job job job job

Slide 13

Slide 13 text

ϓϩάϥϜύϥμΠϜ • ͲͷϓϩάϥϜύϥμΠϜΛ࠾༻͢Ε͹"ͲΜͲΜ"jobΛফԽͰ͖Δ͔ • Ҋ1: ϚϧνεϨου • ࢒೦ͳ͕ΒPerlͰεϨουϓϩάϥϛϯά͸ݫ͍͠ • Ҋ2: Event Driven • jobͷ࣮ࡍͷத਎͸֎෦ϓϩάϥϜ࣮ߦɺHTTP௨৴ͩͬͨɻΑͬͯEvent DrivenʹͽͬͨΓɻ͕ɺطଘͷCPAN clientͷίʔυΛ࢖͑ͳ͍ • Ҋ3: Ϛϧνϓϩηε • ·ͣ͸͜ΕͰ

Slide 14

Slide 14 text

Ϛϧνϓϩηε • ϚϧνϓϩηεΛ࠾༻ʂ • ໰1: master͔Βworker΁job ͷૹ৴ɺworker͔Βmaster ΁݁Ռͷૹ৴Λ͍ͨ͠ɻͲ͏ ΍ͬͨΒͰ͖ΔͩΖ͏ʁ • ໰2 master͸workerͷ "finished"Λ͍ͪૣ͘ݕ஌ ͠ɺ࣍ͷjobΛৼΓ͍ͨɻͲ͏ ΍ͬͨΒͰ͖ΔͩΖ͏ʁ worker worker worker master process

Slide 15

Slide 15 text

IPC • Ͳ͏΍ͬͯmasterͱworker͸௨৴͢Δͷ͕͍͍ͷ͔ • Ҋ1: File • master͕workerͷ"finished"Λૉૣ͘ݕ஌Ͱ͖ͳ͍ɻinotifyͱ͔݁ߏ஗ ͍ɻ • Ҋ2: TCP/IP • େ͔͛͞ͳʁ • Ҋ3: pipe • ͦΕͧΕͷworkerʹૹ৴ɺड৴༻2ຊͷpipeΛܨ͙ͱΑͦ͞͏

Slide 16

Slide 16 text

select • Ͳ͏΍ͬͨΒɺmaster͸workerͷ"finished"Λ ͍ͪૣ͘ݕ஌Ͱ͖Δ͔ • worker͸pipeʹ݁ՌΛॻ͖ࠐΈɺmasterʹ "finished"Λ఻͑Δͭ΋Γ • Αͬͯ select(2)Ͱworkerͨͪʹܨ͕ΔpipeΛ؂ ࢹ͢Ε͹ɺ͍ͪૣ͘"finished"Λݕ஌Ͱ͖Δ

Slide 17

Slide 17 text

·ͱΊΔͱ • ϚϧνϓϩηεΛ࠾༻ • masterͱworkerΛ2ຊͷpipe Ͱͭͳ͙ • master͸worker͔Βͷड৴ ༻pipeΛselect͢Δ͜ͱͰɺ workerͷ"finished"Λ͍ͪૣ ͘ݕ஌Ͱ͖Δ worker worker worker master process pipe pipe pipe select

Slide 18

Slide 18 text

࣮ࡍͷcpmͷίʔυ master͕jobΛܭࢉ ready (= "finished")ͳworkerΛऔಘ (಺෦ͰpipeͨͪͷselectΛ͍ͯ͠Δ!) pipeΛ௨ͯ͠ͷworkerͱͷ௨৴෦෼Λ Parallel::PipesϞδϡʔϧͱͯ͠ந৅Խ readyͳworkerʹjobΛૹ৴ ͜ͷίʔυʹCPAN clientߴ଎Խͷ΄ͱΜͲ͕٧·ͬͯΔ

Slide 19

Slide 19 text

࠷ޙʹ • cpmͷ࣮૷ʹ͍ͭͯ࿩ͨ͠ • cpm͸ૣ͍ͨ͘͠ͱͷࢥ͍Ͱ͍ͭͬͯͨ͘Βɺ
 "ͨ·ͨ·"͍·ͷ࣮૷ʹͳͬͨ • "΍Γ͔ͨ͸ͻͱͭ͡Όͳ͍" • ΍Γ͍ͨ͜ͱɺࢼͯ͠Έ͍ͨ͜ͱ͕ͨ͘͞Μ͋Δ • event driven CPAN clientॻ͖͍ͨʂ