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
Parallel::Pipesの紹介
Search
Shoichi Kaji
May 31, 2025
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Parallel::Pipesの紹介
2025/05/31 Houtou.pm #1
Shoichi Kaji
May 31, 2025
More Decks by Shoichi Kaji
See All by Shoichi Kaji
go-exhaustruct linterのすすめ
skaji
0
120
宿泊予約サイトにおける検索と料金計算の両立
skaji
2
4.2k
昔のGo, 今のGo ~比較, ソート編~
skaji
0
300
Perl Quiz
skaji
0
180
cpm at PerlCon 2019
skaji
0
150
Perl5 Package Manager
skaji
0
790
Internal of cpm
skaji
0
660
How to execute external programs in Perl
skaji
3
740
Writing Perl with w0rp/ale
skaji
0
2.4k
Other Decks in Programming
See All in Programming
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
AIエージェントの隔離技術の徹底比較
kawayu
0
470
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
220
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
460
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.7k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
170
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
660
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
RTSPクライアントを自作してみた話
simotin13
0
510
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Swiftのレキシカルスコープ管理
kntkymt
0
220
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
Leo the Paperboy
mayatellez
7
1.8k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
300
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
Google's AI Overviews - The New Search
badams
0
1k
Odyssey Design
rkendrick25
PRO
2
690
Done Done
chrislema
186
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Technical Leadership for Architectural Decision Making
baasie
3
400
Transcript
Parallel::Pipesͷհ Shoichi Kaji
࣍ • Perlͷฒྻ/ฒߦॲཧ • PerlͷforkϞδϡʔϧ • Parallel::ForkManager • Parallel::Prefork •
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨʂ • Parallel::PipesΛ࡞ͬͨ • ʑͷPerlεΫϦϓτʹฒྻॲཧΛ
Perlͷฒྻ/ฒߦॲཧ • PerlʹҰԠthread͕͋Δ͕ɺ5.20ΑΓެࣜʹ discouragedͱͳ͍ͬͯΔ • Πϕϯτۦಈʹؔͯ͠ɺPerlຊମʹͦͷαϙʔτ ͳ͍͕ɺ͍͔ͭ͘ͷ࣭ͷߴ͍Ϟδϡʔϧ͕ͦͷػೳΛ ఏڙ͍ͯ͠Δ: AnyEvent, Mojo,
IO::Async, etc • forkͯ͠ෳϓϩηε্ཱͪ͛ɺͦΕͰฒྻॲཧΛ͢ ΔબࢶͪΖΜ͋Δɻࠓ͜͜Λѻ͍͍ͨ
PerlͷforkϞδϡʔϧ • forkͯ͠ෳͷchildϓϩηεΛىಈ͠ɺchildϓϩηεͷཧɺ σʔλͷड͚͠Λखॿ͚ͯ͘͠ΕΔϞδϡʔϧͱͯ͠༗໊ͳͷ2બ • Parallel::ForkManager • Balazs Szabo͞Μ࡞ •
͔ͳΓੲ͔Β͋ΔϞδϡʔϧ • Parallel::Prefork • Oku Kazuho͞Μ࡞ • HTTP server StartletͰΘΕ͍ͯΔ
Parallel::ForkManager • preforkͰͳ͘ॲཧͷͨͼʹ ຖճforkΛݺͿελΠϧ • ൺֱతCLIͳͲͰΘΕΔ Πϝʔδ • fi leܦ༝Ͱchildϓϩηεͷ
݁ՌΛड͚औΕΔ
Parallel::ForkManager ॲཧ։࢝ ॲཧऴྃ parent child child child child parent childʹೖྗσʔλΛ͢
child͔Β݁ՌσʔλΛड͚औΔ
Parallel::Prefork • σʔϞϯϓϩηε༻ • childϓϩηεͷࢹ • γάφϧϋϯυϦϯά • childϓϩηεΛҰఆʹอͭ •
parent, childϓϩηεؒͰͷ σʔλͷड͚͠ػೳ༗͍ͯ͠ͳ͍
Parallel::Prefork ॲཧ։࢝ ॲཧऴྃ parent child child child child childΛࢹ͢Δ child
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨ! • CPANϞδϡʔϧΛฒྻʹΠϯετʔϧͰ͖ΔCPAN client cpmΛ࡞ͬͨ • "CPANϞδϡʔϧΠϯετʔϧ"ΛɺͦΕࣗಠཱ࣮ͯ͠ߦͰ͖Δࡉ͔͍λεΫʹΘ͚ɺͦΕ Λฒྻʹॲཧ͍ͯ͘͠ઓུΛͨͯͨɻͱͳΔͱࡉ͔͍λεΫΛͲΜͲΜchildϓϩηεʹ͛ Δɺॲཧ͕ऴΘͬͨΒଈ࠲ʹ݁ՌΛಘΔɺͱ͍͏Έ͕ཉ͍͠ •
Parallel::ForkManager ? • childϓϩηεىಈ࣌ʹλεΫΛ1ͭͤΔͷΈͰԿͤͳ͍ • ݁Ռͷड͚औΓ͕ fi leϕʔεͩͱɺ݁Ռ͕ग़͍ͯΔ͜ͱʹଈ࠲ʹؾ͚ͳ͍ • Parallel::Prefork ? • childϓϩηεͱͷσʔλͷΓͱΓͷػߏ༻ҙ͞Ε͍ͯͳ͍ • childϓϩηεΛࢹͯ͠΄͍͠Θ͚Ͱͳ͍
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨ! ॲཧ։࢝ ॲཧऴྃ parent child child child child childͱํʹσʔλΛΓͱΓ͍ͨ͠ childͷॲཧ͕ऴΘͬͨ͜ͱΛଈ࠲ʹݕ͍ͨ͠
-> pipeͱselectͰ࣮ݱͰ͖ͦ͏ʂ child
Parallel::Pipes • Parallel::PipesΛ࡞ͬͨ • preforkͨ͠childϓϩηεͱ pipeͰํʹଓ͠ taskɺ݁Ռͷड͚͠Λߦ͏ɻ pipeΛselect͠ɺॲཧऴྃΛ ଈ࠲ʹݕ͢Δ •
Parallel::PipescpmͷதͰΘΕ cpmͷͦ͞ͷͷͱͳ͍ͬͯΔ
Parallel::Pipes • cpmͰͷParallel::Pipesͷ͍ํ ͋Δtaskͷ͕ྃผͷtaskΛੜΉ ্ؔɺٕతͰ͋Δ • ҰํͰParallel::Pipes::App->map ୯ʹΈࠐΈؔmapͷฒྻ൛ ͱࢥͬͯ͏͜ͱͰ͖Δ •
ʑͷPerlεΫϦϓτʹ ฒྻॲཧΛ • Perlbetter shellͱݴΘΕΔ • Έͳ͞Μʑͷࡉʑͨ͠λεΫΛPerlεΫϦϓτΛॻ͘͜ͱͰ͜ͳ͍ͯ͠Δͱࢥ͏ • ͦ͏ͨ͠εΫϦϓτͰฒྻॲཧΛॻ͘ͷɺͳ͔ͳ͔ͳ͍Α͏ʹࢥ͏ •
ҰํͰ Parallel::Pipes::App->mapΛ͔ͳΓͷέʔεͰɺ ΈࠐΈؔmapͷdrop in replacement ͱͯ͑͠Δ • ͪΐͬͱͨ͠ͷͰฒྻԽ͘͠ͳΔͱɺલఏ͕มΘΔ 😉 • ʑͷPerlεΫϦϓτʹฒྻॲཧΛೖΕͯΈΔͷͲ͏ ? • ྫ: https://github.com/skaji/binary-install/blob/main/src/lib/App.pm#L500 https://github.com/skaji/build.pl/blob/main/src/lib/App.pm#L242
·ͱΊ • PerlͷฒྻॲཧϞδϡʔϧParallel::PipesΛհ ͨ͠ • cpm෦ͰΈʹΘΕ͍ͯΔ • ҰํɺͦΕΈࠐΈؔmapͷ͓खܰฒྻ൛ͱ ͯ͠͏͜ͱͰ͖Δ •
ʑͷPerlεΫϦϓτͰฒྻॲཧΛ 😉