私は、私の脳をパラレル/並行プログラミング(Java)でラップしようとしています。私が読んでいるチュートリアルではカバーされていないようないくつかのファンダメンタルズを諦めています。並列プログラミングはよりグリッド化されているかクラスタ化されていますか?
「マルチスレッド」または「並列/並行プログラミング」について言及すると、大きな問題を抱えてそれを多くのスレッドに広げていること、または最初に明示的に小さなサブコンポーネントに分解していることを意味します。問題を解決し、各サブ問題をスレッドに渡しますか?
例えば、EndWorldHungerTask implements Runnable
があり、タスクがいくつかの大きな問題を抱えているとします。この「同時」または「マルチスレッド」、我々が通過するこのEndWorldHungerTask
を行うために
public class EndWorldHungerTask implements Runnable {
public void run() {
for(int i = 0; i < 100000000; i++)
someReallyExpensiveOperation();
}
}
:その目的を完了するためには、いくつかの本当に重い物を持ち上げる、と言うを行うには億回を持っていますたとえば、100人のワーカースレッド(100人の作業者のそれぞれが、アクティブになるときにJVMによって指示され、次の繰り返し/ someReallyExpensiveOperation()
コールで作業する)、または100人の作業者のそれぞれがループのさまざまな部分を繰り返す/作業する予定ですか?どちらの場合も、100人の労働者のそれぞれは、100万回の反復だけです。
しかし、最初のパラダイムの下では、Javaは実行するタイミングを各スレッドに伝えています。第2の下では、開発者は手動で(コード内で)問題を事前にパーティション化し、各サブ問題を新しいスレッドに割り当てる必要があります。
私は、Javaの土地でどのように "通常行われている"かを尋ねています。そして、この問題だけでなく、一般的に。