>  기사  >  Java  >  자바 코루틴

자바 코루틴

王林
王林원래의
2024-08-30 15:58:11804검색

Java 코루틴은 실행 중인 프로세스에서 프로세스로 전환되지 않는 멀티태스킹 스타일로 수행할 특정 작업을 일반화하기 위한 단위로 패키징하여 컴퓨터에 전송되는 명령 집합으로 정의됩니다. 다른 프로세스를 대신하여 협동 멀티 태스킹으로 동시에 실행합니다. 이러한 명령어는 일시 중지 및 재개를 허용하여 실행됩니다. 우리는 코루틴, 협동 작업, 이벤트 루프, 반복자, 파이프 등을 통해 작성된 프로그램 장르에 대해 잘 알고 있습니다. 그러나 일반적으로 서브루틴, 스레드, 생성기와 같은 다른 개념과 관련하여 코루틴의 개념에 대해 혼동합니다. , 상호 재귀.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

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 중 하나가 Da Vinci Machine Project입니다.
  • 일반 바이트코드를 다시 작성하면 코루틴 기능을 구현할 수도 있습니다. 이러한 루틴은 즉시 또는 컴파일 타임에 처리됩니다. 즉, 다양한 구현이 존재합니다. offbynull, Google 코드 아카이브 및/또는 Apache commons에서.
  • 플랫폼별 메커니즘을 통해 Java 네이티브 인터페이스를 구현하고 OS 또는 C 라이브러리에서 구현하여 JVM 기능을 제공하는 데 도움을 줄 수도 있습니다.
  • 마지막으로 성능은 JVM의 스레드 구현에 크게 좌우되지만 스레딩을 사용하여 코루틴을 구현할 수도 있습니다.

코루틴은 전용 시스템 스레드를 보유하는 대신 기존 스레드를 공유하여 실행되는 경량 스레드입니다. 공유 스레드가 필요 이상으로 점유되지 않도록 공유하여 실행하는 협력적인 방식입니다. Java 7의 ForkJoinTask와 Java 8의 CompletableFuture는 공유 스레드 실행과 관련된 명시적인 지원을 제공합니다. 이제 코루틴이 불확실한 시간 동안 일시 중지되면 컴퓨팅 리소스가 활용되지 않으며 대기 중인 리소스를 사용할 수 있는 경우에만 실행을 재개할 수 있습니다.

우리의 첫 번째 작업은 코루틴을 선언하는 것입니다. 정지를 포함하는 개체를 선언하는 기본 메커니즘이 부족합니다. 유일한 방법은 API를 통해 구현하는 것입니다. 코루틴 클래스의 인스턴스로 선언할 수 있으며, esoco GmBH에서는 새로운 코루틴 인스턴스를 호출하기 위해 Coroutine.first() 메서드를 제공합니다. 또는 생성자 인스턴스를 호출하여 동일한 작업을 수행할 수 있습니다. Coroutine.then( )을 사용하면 사용자는 보완을 위한 추가 기능을 제공할 수 있습니다. 코루틴의 또 다른 주요 특징은 변경할 수 없으며 정의된 단계의 순서를 변경할 수 없다는 것입니다.

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:

자바 코루틴

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:

자바 코루틴

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.

위 내용은 자바 코루틴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:자바 10 기능다음 기사:자바 10 기능