次の並行性


9

過去1年間、私はJavaの並行処理に多くの取り組みをしており、多くの並行パッケージを構築して取り組んできました。並行世界の発展という点では、私は非常に自信があります。さらに、並行プログラミングについてもっと学び、理解することに非常に興味があります。

しかし、私は次の自分に答えることができませんか?マルチコアプロセッシングに関連するスキルをさらに引き継ぐために、何を追加で学習または取り組む必要がありますか。次のレベルに進むことができるように、マルチコア処理に関連する素敵な本(「実際の並行性」と「Javaでの並行プログラミング」を読んで楽しんだ)またはリソースがある場合は?


理論上の基礎を見逃した場合は、今すぐ学んでください。en.wikipedia.org
SK-logic

回答:


8

免責事項-私は同時実行の専門家ではありませんが、私の共著者は彼をオウムにしています:-)

Doug LeaとBrian Goetzの本を読んだことがあるので、これまでで最高の資料を確実に取り上げたことでしょう。

今後、Java 7には新しい並行性の機能強化があります。最も顕著なのは、Fork / Joinフレームワークと新しい非同期NIO APIです。

Java 8では、ラムダ/並列コレクションを使用して、同時実行性がさらに向上します。

真剣に検討するもう1つのことは、同時実行性を処理する別の方法です。率直に言って、Javaの「可変オブジェクトのロック」アプローチは、APIがどれだけ改善されても、常にエラーが発生しやすくなります。したがって、Javaとの相互運用性を維持しながら並行性の問題に対処する代替方法として、ScalaのアクターモデルとClojureのSTMを検討することをお勧めします。

[警告->セルフアドバタイズメント]したがって、私が自然に私たちの次の本、The Well-Grounded Java Developerをお勧めします。

忘れないように、GroovyにはGparsライブラリも強く推奨されていますが、個人的には使用していません。


この本をありがとう:)インドでは、おすすめの本(ローカル版)がここにないので、他の良い本を提案してください。PS:並行性は、本の逸品
ジャティン

@Martijn、ニート!私はここしばらくの間、GroovyとScalaに興味を持っており、さらに学習するために、Groovyと遊んでみたいと思いました。これらの言語の初心者向けの本ですか、それともこれまでの経験を前提としていますか?
maple_shaft

@Jatin Puri-「実際の並行性」と「Javaでの並行プログラミング」について他のタイトルは本当に知りません。HenryWongの「Java Threads」O'Reillyタイトルがありますが、それだけです。
Martijn Verburg 2011

@maple_shift-初心者向けです:-)
Martijn Verburg

2

Dプログラミング言語は、並行プログラミングに2つのパラダイムを提供します。どちらも用途があり、かなり興味深いものです。

std.concurrencyは、デフォルトのメモリ共有なしでメッセージパッシングを提供します。Dのすべてのグローバルおよび静的変数は、デフォルトでは、スレッドローカルであり、spawnかつsend変更可能なポインタ間接を含むメッセージを送信することはできません。限定的な共有は、sharedキーワードを介して取得できます。これには、型システムによる追加のチェックが必要です。言語の安全な方言の外では、__gsharedキーワードを使用して古典的なC / Javaスタイルのグローバル/共有変数を強制できますが、すべての賭けはレースの安全性に関してはオフです。このモデルは、Andrei Alexandresuの本「The D Programming Language」の無料の章で詳しく説明されています。

std.parallelismはあまり安全ではなくstd.concurrencyより柔軟いくつかの方法であり、マルチコアデータと一般的なケースの同時実行ではなく、スループット処理データを増加させるためのタスクの並列処理に向けて、具体的に連動されています。並列foreachループ、非同期関数呼び出し、並列縮小などが特徴です。レースセーフなコードを簡単に記述できるメカニズムを提供しますが、そのためにはある程度の訓練が必要です。

Dの2つの主要なマルチスレッドパラダイムに関するより完全な議論は、この件に関する私の最近の記事にあります。


2

Clojureをご覧になることを強くお勧めします

並行性へのアプローチは非常に斬新で、私の見解では、Javaや他のほとんどの言語で見られるものに大幅な進歩があります。いくつかの重要なポイント:

  • IDと状態は分離されています-OOPはオブジェクトのIDを、変更可能なメンバー変数の形でその現在の状態で補完します。Clojureは、ID(管理された参照)と状態(不変のデータ構造)を厳密に分離し、信頼性の高い並行プログラムの開発を大幅に簡素化します。
  • 永続的な不変のデータ構造 -すべてが不変であるため、いつでもデータ/状態のスナップショットを取得でき、その下で変化することはありません。しかし、それよりも優れています。以前のバージョンとデータを共有する永続的なデータ構造です。結果として、操作は、不変データのコピーオンライト戦略に対して支払うO(n)ではなく、O(1)にはるかに近くなります。
  • ソフトウェアトランザクションメモリ -ロックを使用するのではなく、コードを(dosync ...)ブロックで囲むだけで、自動的にトランザクションとして実行されます。デッドロックのリスクがなく、複雑なロック戦略を開発する必要もありません。これは、特に上記の不変のデータ構造と組み合わせると、大成功です。Clojure は、STMにマルチバージョンの同時実行制御を効果的に実装しています。
  • 関数型プログラミングのパラダイムは、信頼性の高い並行コードをより簡単に作成するために使用されます。基本的に、不変のデータ構造を取得し、それを純粋な関数で実行し、別の不変のデータ構造を出力すると、コードの同時実行性が保証されます。

この動画を紹介として見てみることをお勧めします


1

Javaを拡張し、JVMで実行されるScala言語を見てください。Erlangから「アクター」の概念を借用し、同時実行エラーを処理するための優れた機能を提供します。


1

まったく新しいレベルにしたい場合は、CUDAを使用したプログラミングを検討することをお勧めします。

これにより、いくつかのメインCPUコアではなく、グラフィックスカード上の数百の処理コアにアルゴリズムを分散できます。GPGPU技術を使用してpythonなどの高水準言語を高速化することを明らかに容易にする言語バインディングさえあります


@Chiron-正直なところ、他の誰もそれについてすでに言及していなかったことに驚きました。
マークブース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.