>백엔드 개발 >Golang >여러 차단 대기열에서 효율적으로 읽기 위해 Go의 'select'와 동일한 Java가 있습니까?

여러 차단 대기열에서 효율적으로 읽기 위해 Go의 'select'와 동일한 Java가 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-18 20:21:11196검색

Is There a Java Equivalent to Go's `select` for Efficiently Reading from Multiple Blocking Queues?

Java의 Go 채널과 동일

질문:

데이터를 효율적으로 읽어야 합니다. 별도의 리더 스레드를 만들지 않고 여러 차단 대기열에서. Java에 Go의 select/epoll과 동등한 메커니즘이 있습니까?

답변:

Alternative 클래스를 제공하는 JCSP 라이브러리 사용을 고려해 보세요. Alternative는 Go의 select 문과 비슷합니다. 지속적인 폴링 없이 여러 소스 채널의 데이터를 다중화할 수 있는 단일 소비자 스레드를 생성할 수 있습니다.

JCSP 대안의 장점:

  • 공정한 멀티플렉싱: 대안은 데이터 소비의 공정성을 보장하여 입력 채널이 손상되지 않도록 방지합니다.
  • 교착 상태로부터의 자유: JCSP 채널 및 대안은 공식적으로 검증되어 신뢰성이 높고 교착 상태에 대한 저항력이 높습니다.

사용 예:

다음 Java 코드는 다음을 사용하여 공정한 멀티플렉서를 보여줍니다. JCSP:

import org.jcsp.lang.*;

public class FairPlex implements CSProcess {

    private final AltingChannelInput[] in;
    private final ChannelOutput out;

    public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) {
      this.in = in;
      this.out = out;
    }

    public void run () {

      final Alternative alt = new Alternative (in);

      while (true) {
        final int index = alt.fairSelect ();
        out.write (in[index].read ());
      }
    }
 }

추가 참고 사항:

Maven 저장소에 있는 JCSP의 현재 버전은 JCSP 웹 사이트에 명시된 것과 달리 1.1-rc5입니다.

위 내용은 여러 차단 대기열에서 효율적으로 읽기 위해 Go의 'select'와 동일한 Java가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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