ホームページ  >  記事  >  Java  >  Java コルーチン

Java コルーチン

王林
王林オリジナル
2024-08-30 15:58:11803ブラウズ

Java コルーチンは、実行中のプロセスからプロセスへの切り替えがないマルチタスクのスタイルによって実行される特定のタスクを一般化するためのユニットとしてパッケージ化することで、コンピューターに送信される一連の命令として定義されます。他のプロセスを実行し、代わりに協調的なマルチタスクとして同時に実行します。これらの命令は、一時停止および再開を許可することによって実行されます。私たちは、コルーチン、協調タスク、イベント ループ、イテレータ、パイプなどを通じて記述されたプログラムのジャンルにはよく精通しています。しかし、コルーチンの概念は、サブルーチン、スレッド、ジェネレータなどの他の概念と比較して混乱するのが一般的です。 、相互再帰。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java コルーチンの構文

前述の構文を以下に示します。

1. POM に依存関係を入力します。

<dependency>
<groupId> {package name goes here} </groupId>
<artifactId> {artifact ID goes here} </artifactId>
<version> {version number goes here} </version>
</dependency>

2.コルーチンのクラス インスタンスを宣言します。

public static final class < Class name goes here > implements Coroutine

3.親クラスの実装をオーバーライドします。

@Override

4. com.offbynull.coroutines.

によるコルーチンの宣言
CoroutineRunnerr = new CoroutineRunner(new <class name> ());

Java でコルーチンはどのように動作しますか?

Java のコルーチンについて説明する前に、コルーチンを実装するさまざまな方法を見てみましょう。さまざまな方法によって、純粋な Java でのコルーチンの動作が決まります。実際には、Java の抽象化によって課せられる制限がいくつかありますが、実装が止まることはありません。

広く受け入れられており、コルーチンの実装を処理するメソッドが 4 つあります。

  • コルーチンをネイティブにサポートするために、コルーチンの実装を考慮するパッチが適用された変更された JVM があります。このような変更された JVM の 1 つが Da Vinci Machine プロジェクトです。
  • 通常のバイトコードを書き換えることで、コルーチン機能を実装することもできます。これらのルーチンは、オンザフライまたはコンパイル時に処理されます。さまざまな実装が存在します。 offbynull、Google コード アーカイブ、Apache Commons から。
  • プラットフォーム固有のメカニズムを通じて Java ネイティブ インターフェイスを実装し、OS または C ライブラリに実装して、JVM 機能の提供を支援することもできます。
  • 最後になりましたが、コルーチンはスレッドを使用して実装することもできますが、パフォーマンスは JVM のスレッド実装に大きく依存します。

コルーチンは、専用のシステム スレッドを持たずに、既存のスレッドを共有することで実行される軽量のスレッドです。この協調的な実行方法は、共有によって実行され、共有スレッドが必要以上に占有されないようにします。 Java 7 の ForkJoinTask と Java 8 の CompletableFuture は、共有スレッドの実行に関する明示的なサポートを提供します。今後は、コルーチンが不定の時間中断された場合、計算リソースは使用されず、待機中のリソースが利用可能になった場合にのみ実行を再開できます。

私たちの最初のタスクは、コルーチンを宣言することです。一時停止を含むオブジェクトを宣言するためのネイティブ メカニズムが欠如しています。唯一の方法は、API を通じて実装することです。これはクラス コルーチンのインスタンスとして宣言でき、esoco GmBH は新しいコルーチン インスタンスを呼び出すための Coroutine.first() メソッドを提供します。あるいは、コンストラクター インスタンスを呼び出して同じタスクを実行することもできます。 Coroutine.then( ) を使用すると、ユーザーは補完する追加機能を提供できます。コルーチンのもう 1 つの大きな特徴は、コルーチンが不変であり、定義されたステップのシーケンスを変更できないことです。

CoroutineWriter と CoroutineReader を使用すると、コルーチンをシリアル化または逆シリアル化できます。 Java の組み込みシリアル化関数がデフォルトで使用され、コルーチンの状態はそれを使用して作成されます。それとは別に、シリアル化または逆シリアル化をさらに制御するためのカスタム実装があり、XML、JSON などのさまざまなシリアル化形式、または XStream、Kryo、Jackson などのさまざまなシリアライザーを追加するために CoroutineWriter および CoroutineReader に渡されます。

シリアル化は高度な機能であり、JVM バイト コードに精通していることが強く推奨されます。シリアル化の概念により、コルーチンをバイト配列に変換したり、バイト配列から逆変換したりすることができます。

シリアル化の一般的な使用例は次のとおりです。

  • Using serialization, one can cache or checkpoint to a disk and write it back again.
  • Over the wire coroutine transmission.
  • Coroutine forking.

Another derivative of serialization is the versioning which enables developers to change the logic of coroutine along side still being able to load data using serialization from earlier versions.

Examples of Java Coroutines

Given below are the examples of Java Coroutines:

Example #1

A “Hello World” type example coroutines.

Syntax:

public static final class CoroutineDemo implements Coroutine {
@Override
public void run(Continuation c) {
System.out.println("Start of Main stream ");
for (int i = 0; i < 10; i++) {
echo(c, i);
}
}
private void echo(Continuation c, int x) {
System.out.println(x);
c.suspend();
}
}
CoroutineRunner runnerVar = new CoroutineRunner(new CoroutineDemo());
runnerVar.execute();
runnerVar.execute();
runnerVar.execute();
runnerVar.execute();

Output:

Java コルーチン

Example #2

Forking of an object.

Syntax:

public final class CoroutineDemo implements Coroutine {
@Override
public void run(Continuation c) {
System.out.println("Start of Main stream");
for (int i = 0; i < 10; i++) {
echo(c, i);
}
}
private void echo(Continuation c, int x) {
System.out.println(x);
c.suspend();
}
}
CoroutineRunner runner1 = new CoroutineRunner(new CoroutineDemo());
runner1.execute();
byte[] dumped = new CoroutineWriter().write(runner1);
CoroutineRunner runner2 = new CoroutineReader().read(dumped);
runner1.execute();
runner2.execute();
runner1.execute();
runner2.execute();
runner1.execute();
runner2.execute();

Output:

Java コルーチン

Conclusion

Through this article, we have looked at the working of Java coroutines. First, one needs to make sure that the POM and details of the maven build are properly instantiated and the build is done. With the different use case of a simple one and the forking, we are able to understand how 2 variables carry the information and if something gets updated in the root, the same thing is reflected back into the fork as well through serialization.

以上がJava コルーチンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Java 10の機能次の記事:Java 10の機能