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
130
宿泊予約サイトにおける検索と料金計算の両立
skaji
2
4.2k
昔のGo, 今のGo ~比較, ソート編~
skaji
0
310
Perl Quiz
skaji
0
180
cpm at PerlCon 2019
skaji
0
150
Perl5 Package Manager
skaji
0
800
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
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
460
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
190
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
350
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.1k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
330
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
210
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
190
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
140
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
Exploring anti-patterns in Rails
aemeredith
3
430
Prompt Engineering for Job Search
mfonobong
0
360
Git: the NoSQL Database
bkeepers
PRO
432
67k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Typedesign – Prime Four
hannesfritz
42
3.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
630
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
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εΫϦϓτͰฒྻॲཧΛ 😉