Javaや他の非関数型言語とは対照的に、どのように正確Scalaのレバレッジは、より多くのコアをしますか?

hotmeatballsoup:

彼は関数型言語の基本的な利点を説明しようとします(たとえば、スカラ座などを、もちろんのところ私は最近、マーティン・オーダーズキービデオを聞いていたとは限らないスカラ座)OOPや手続き型言語の上に。

言い換えに、彼がいることを説明してムーアの法則は、「より速く」最近、私たちを失敗している、などのプロセッサを作るために、代わりにコアのトランジスタの数を倍増することができるという、CPUメーカーは、単により多くのコアを提供しています。これは、順番に、より完全に同時/マルチスレッドアプリケーションで活用されることにCPUを貸します。だから、離れて主要テイクだったこと:より多くの同時自身のコードの多くのスニペットが異なるコア上で同時に実行されているアプリケーション、および全体的な高速化プログラムが実行CPUに複数のコアを持ちます。

ここまでは順調ですね。

彼は説明しなかった(またはそれ以上の可能性が、私は把握できなかったこと)である、なぜ Scalaのような関数型言語は、より多くの同時その後、他の非関数型言語であることに自分自身を貸します。我々はJVMスペースの話をすることが起こるので、のは、JavaとScalaのの簡単な比較を行うことができます。それはそれではなく、純粋なJavaで実装された場合には、並列化することがより困難になるだろう、というのScalaプログラムについては何ですか/、同時作る場合は特にそのすべてのJVMバイトコードにまでコンパイルと同じネイティブ機能と同じJVMで実行されていますか?

私は2つのJVMのアプリを持っている意味、App1のは、JavaとScalaで書かれたApp2の中に書かれました。どちらもまったく同じタスクを実行し、同じことを達成します。どちらのJVMバイトコードにコンパイルダウンと同じJVMがインストールと同じコンピュータ上で実行されます。どのようにScalaのアプリは、それがより多くのJavaの1(したがって、より速く、より上のコアを持つCPU上)よりも、同時実行のために最適ですJVM機能「にタップ」することができますか?

Chaitanya Waikar:

あなたはアプリの両方が、最終的にはJVM上のバイトコードに煮詰めることを言うときあなたは絶対に正しいです。同時実行のためのScalaで利用可能なライブラリやフレームワークのほとんどは、Javaにも利用できます。しかし、離れてスカラを設定事があるに建てられたScalaの 不変のサポートScalaは非常に豊かな不変コレクションを持っていると不変性を受け入れるのこの機能は、同時並列アプリケーションのためのライトのコードにそれが容易になります。Scalaは、スレッドレベルのコードを書くことからユーザーを抽象化し、ユーザーがビジネスロジックに集中することができます。先物APIは、この時に非常に便利です。

Scalaは(すなわち機能を構成する)と、あなたはJavaで、例えば、プログラミングスレッドによってに実行することを、一般的な並行性の問題のすべてを排除することが可能な役者、内可変状態を分離する関数型プログラミングのパラダイムを包含する。Scalaのは、デザインスパークの言語として選ばれたのはこのためです。

Scalaでは先物APIが何もなく、開発者によって設定可能であるスレッドプールではありません基本的な実行コンテキストを持っています - :今Scalaは他の非関数型言語に比べて、より多くのコアを活用する方法についてのあなたの質問の主要部分に来ます。このAPIを使用すると、すべてのコアを利用することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=175838&siteId=1