Skip to Content
Javaへの関数的アプローチ
book

Javaへの関数的アプローチ

by Ben Weidig
March 2025
Intermediate to advanced
414 pages
5h 47m
Japanese
O'Reilly Media, Inc.
Content preview from Javaへの関数的アプローチ

第8章. ストリームによる並列データ処理

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

私たちの世界は、圧倒的に同時並行的である。 私たちのプログラミングは、より多くの問題を解決する必要があり、そのためデータ処理もしばしば並列であることが利点となる。

第6章では、関数演算で構築されたデータ処理パイプラインとしてのストリームについて学んだ。 次は並列化だ!

この章では、並行処理と並列処理の重要性、並列Streamsをいつどのように使うか、そしていつ使わないかについて学ぶ。 これまでの2つの章でStreamsを使ったデータ処理について学んだことはすべて、Streamsを並列処理に使う場合にも当てはまる。 そのため、この章では並列Streamsの違いと複雑さに集中する。

並行処理と並列処理

並列性と並行性という用語はしばしば混同されるが、それはこの概念が密接に関連しているからである。プログラミング言語Goの共同設計者の一人であるロブ・パイクは、この用語をうまく定義している:

並行処理とは、一度に多くのことを処理することである。 並列処理とは、一度に多くのことを実行することである。 この2つの考え方は明らかに関連しているが、一方は本質的に構造に関連しており、もう一方は実行に関連している。 並行処理とは、並列処理によって実際に同時に実行できるように、物事を構造化することである。 しかし、並列処理が並行処理の目的ではない。 並行処理の目的は、優れた構造と、並列処理のような実行モードを実装する可能性である。

ロブ・パイク「並行処理は並列処理ではない」(Waza 2012にて

同時実行とは、複数のタスクが重複して実行され、利用可能なリソースを奪い合うという一般的な概念である。 1つのCPUコアがスケジューリングし、適切と思われるタスク間を切り替えることで、それらをインターリーブする。 タスク間の切り替えは比較的簡単で高速である。 この方法では、2つのタスクが文字どおり同時には実行されないが、比喩的には1つのCPUコア上で同時に実行することができる。 ジャグラーが片手(シングルCPUコア)だけで複数のボール(タスク)を使っているようなものだと考えてほしい。 彼らはいつでも1つのボールしか持てない(作業をしている)が、どのボールかは時間とともに変わる(中断して別のタスクに切り替える)。 たった2つのボールでも、ワークロードをジャグリングしなければならないのだ。

一方、並列実行とは、インターリーブされたタスクを管理することではなく、同時に実行することである。 複数のCPUコアが利用可能であれば、タスクは異なるコアで並列実行できる。 曲芸師は今、両手(複数のCPUコア)を使って2つのボールを同時に持っている(同時に作業をしている)。

スレッドスケジューリングが2つの概念でどのように異なるかをより視覚的に表現した図8-1を参照されたい。

Concurrent versus parallel thread execution
図8-1. スレッドの同時実行と並列実行

Javaにおける並行処理と並列処理には、スレッドを使って複数のタスクを処理するという同じ目的がある。 両者の違いは、それを効率的に、簡単に、そして正しく安全に行うという課題にある。

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

学習アルゴリズム

学習アルゴリズム

George Heineman
エンジニアが学ぶ会計システムの「知識」と「技術」

エンジニアが学ぶ会計システムの「知識」と「技術」

広川 敬祐, 五島 伸二, 小田 恭彦, 大塚 晃, 川勝 健司

Publisher Resources

ISBN: 9798341625730