Rumah  >  Artikel  >  Java  >  Java Coroutines

Java Coroutines

王林
王林asal
2024-08-30 15:58:11892semak imbas

Coroutine Java ditakrifkan sebagai satu set arahan yang dihantar ke komputer dengan membungkusnya sebagai satu unit untuk menyamaratakan tugas khusus yang akan dilakukan dengan gaya berbilang tugas di mana tiada suis daripada proses berjalan ke proses lain dan sebaliknya menjalankannya secara serentak sebagai multi-tasking koperasi. Arahan ini dilaksanakan dengan membenarkannya digantung dan disambung semula. Kami agak biasa dengan genre program yang ditulis melalui rutin bersama, tugas koperasi, gelung acara, iterator, paip, dll. Walau bagaimanapun, seseorang biasanya keliru tentang konsep coroutine berkenaan dengan konsep lain seperti subrutin, benang, penjana , rekursi bersama.

IKLAN Kursus Popular dalam kategori ini JAVA MASTERY - Pengkhususan | 78 Siri Kursus | 15 Ujian Olok-olok

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Sintaks Java Coroutines

Diberikan di bawah ialah sintaks yang disebut:

1. Memasukkan tanggungan dalam POM.

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

2. Mengisytiharkan tika kelas coroutine.

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

3. Gantikan pelaksanaan pada kelas induk.

@Override

4. Mengisytiharkan Coroutines melalui com.offbynull.coroutines.

CoroutineRunnerr = new CoroutineRunner(new <class name> ());

Bagaimana Coroutines Berfungsi di Java?

Sebelum kita melihat tentang coroutine di Jawa, mari kita lihat cara yang berbeza untuk melaksanakan yang sama kerana cara yang berbeza akan menentukan kerja coroutine di Jawa tulen. Sebenarnya, terdapat beberapa sekatan yang dikenakan oleh abstraksi Java, tetapi pelaksanaannya tidak berhenti daripada dilaksanakan.

Diterima secara meluas, terdapat 4 kaedah yang menjaga pelaksanaan coroutine.

  • Untuk menyokong coroutine secara asli, terdapat JVM yang diubah suai yang ditampal untuk menjaga pelaksanaan coroutine. Salah satu JVM yang diubah suai ialah Projek Mesin Da Vinci.
  • Dengan menulis semula kod bait biasa, seseorang juga boleh melaksanakan fungsi coroutine. Rutin ini dijaga sama ada dengan cepat atau pada masa penyusunan. Terdapat pelbagai pelaksanaan yang ada iaitu. daripada offbynull, arkib kod Google dan/atau Apache commons.
  • Seseorang juga boleh melaksanakan Antara Muka Asli Java melalui mekanisme khusus platform dan dilaksanakan dalam perpustakaan OS atau C serta membantu menyediakan fungsi JVM.
  • Akhir sekali, coroutine juga boleh dilaksanakan menggunakan threading walaupun prestasi akan sangat bergantung pada pelaksanaan JVM bagi thread.

Coroutine ialah utas ringan yang dijalankan dengan berkongsi urutan sedia ada dan bukannya mempunyai utas sistem khusus untuk diri mereka sendiri. Cara kerjasama ini berjalan dengan berkongsi dan memastikan bahawa utas yang dikongsi tidak diduduki lebih daripada yang diperlukan. ForkJoinTask dalam Java 7 dan CompletableFuture dalam Java 8 menyediakan sokongan eksplisit mengenai pelaksanaan utas dikongsi. Kini, jika coroutine digantung untuk masa yang tidak ditentukan, tiada sumber pengiraan digunakan dan boleh menyambung semula pelaksanaan hanya apabila sumber yang ditunggu tersedia.

Tugas pertama kita ialah mengisytiharkan coroutine. Terdapat kekurangan mekanisme asli untuk mengisytiharkan sebarang objek yang termasuk penggantungan; satu-satunya cara ialah dengan melaksanakannya melalui API. Ia boleh diisytiharkan sebagai contoh coroutine kelas, dan esoco GmBH menyediakan kaedah Coroutine.first( ) untuk menggunakan tika coroutine baharu. Sebagai alternatif, seseorang boleh memanggil contoh pembina untuk melaksanakan tugas yang sama. Menggunakan Coroutine.then( ) pengguna boleh menyediakan kefungsian tambahan untuk pelengkap. Satu lagi sifat utama coroutine ialah ia tidak boleh diubah dan urutan langkah seperti yang ditakrifkan tidak boleh diubah.

Menggunakan CoroutineWriter dan CoroutineReader, coroutine boleh bersiri atau dinyahsiri. Fungsi bersiri terbina dalam Java digunakan secara lalai, dan keadaan coroutine dibuat menggunakan itu. Selain itu, terdapat pelaksanaan tersuai untuk mengawal lebih lanjut penyirian atau penyahserilan dan diserahkan kepada CoroutineWriter dan CoroutineReader untuk menambah dalam format penyiaran yang berbeza seperti XML, JSON atau penyiri yang berbeza seperti XStream, Kryo, Jackson dll.

Siri ialah ciri lanjutan, dan kebiasaan kod bait JVM amat disyorkan. Konsep siri membolehkan penukaran coroutine kepada tatasusunan bait dan kembali daripada tatasusunan bait.

Kes penggunaan tipikal untuk bersiri ialah:

  • 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 Coroutines

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 Coroutines

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.

Atas ialah kandungan terperinci Java Coroutines. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Ciri-ciri Java 10Artikel seterusnya:Ciri-ciri Java 10