2010-03-23 5 views
2

일부 출력을 제공하는 시스템 A가 있다고 가정합니다. 이 출력은 시스템 B의 입력으로 사용됩니다. 시스템 A가 생성하는 속도는 시스템 B가 시스템 B를 사용하는 속도보다 빠릅니다. 어떻게 구현할 수 있습니까?자바 설계 질문

시스템 A는 시스템 b가 단지 4mbps를 차지할 수있는 10mbps의 속도로 비디오를 전송합니다. 우리는 이것을 구현할 수 있습니다. 비디오의 지속적인 스트리밍이 있어야합니까? 통신 소켓을 통해 발생합니다. tcp/ip.

아무도 자바의 논리를 알아? 이중 버퍼 솔루션이 있습니까? 나는 모른다.

+1

안에 무엇을 개선할까요? – Bozho

+0

시스템 A가 시스템 B보다 적은 CPU 시간을 갖도록 CPU 할당의 균형을 유지하는 방법을 묻고 있습니까? 아니면 여분의 데이터를 저장하는 방법? 시스템 B를 더 빨리 만드는 방법 ...? – Steve

+0

A가 B보다 빨리 생성되면 B를 더 많이 사용하지 않으면 손에 문제가있는 것입니까? A가 끊임없이 생산되고 하나의 B로 B가 A의 출력을 처리하는 것을 결코 끝내지 않으면 ... – Joel

답변

1

운영 체제, 통신 또는 전자 제품을 학습하면 buffers이 적합하다는 것을 알 수 있습니다.

일시적인 속도 차이에 대처할 수있는 탄력적 인 방법 일 수 있습니다. 속도 차이가 영구적이며 버퍼의 크기가 유한 한 경우 시스템 A는 결과적으로 일시 중지하거나 출력을 잃을 위험이 있습니다.

+0

감사합니다 존, 그들은 프로토콜의 고급 버퍼 개념을 사용하고 있습니다. 특히이 개념을 알고 싶습니다. 누가 순수 비트 수준 프로그래밍에서 나를 도울 수 있습니다. 내 경력에 도움이된다. –

+0

이중 버퍼링은 애니메이션에 대해 완전히 다른 개념입니다. 한 버퍼를 다른 버퍼를 수정하는 동안 표시 한 다음 다른 버퍼를 교체합니다. 커뮤니케이션에 대한이 개념을 걱정하지 마십시오. Java 프로듀서 소비자 자습서는 학습하기 좋은 장소 여야합니다. http://java.sun.com/docs/books/tutorial/essential/concurrency/guardmeth.html – John

0

당신은 시스템을 개선하거나하지 않거나 시스템 B가 시스템 A가 메시지를 보내길 기다립니다. 아니면 기다리는 동안 스레드를 사용할 수 있습니다. 어쩌면 자세한 내용을 제공 할 수 있다면 누군가 대답 할 수있을 것입니다. 시스템 B를 어떻게 개선 할 수 있는지, 우리가 응답하기를 원하는지, 우리는 어느 시스템에 대해서도 알지 못합니다.

0

시스템 B의 성능 향상 또는 시스템을

이 알려진 문제라는 생산자 - 소비자
5

:-) 성능 감소 : 당신은 질문과 같이 스레드를 사용할 수 http://en.wikipedia.org/wiki/Producer-consumer_problem 알을 - 당신은 시스템에게 다른 스레드에서 실행을 할 수 있습니다 그것이 의미가있을 때, 당신은 그 스레드를 잠들게 할 수 있습니다. 하드웨어에서 알려진 다른 솔루션은 버퍼, 중간 메모리를 사용할 수 있습니다.

1

다릅니다. 시스템 A가 지속적으로 시스템 B가 처리 할 수있는 것보다 더 많은 출력을 생성하는 경우, 당신은 두 가지 옵션이 있습니다

  • 시스템 B는 부하 시스템 A는
  • 시스템 A로부터의 출력을 처리하는 중개 시스템 C를 구현 생산 처리 개선, 이 출력을 집계하여 시스템 B가 처리 할 수있는 형식으로 표시합니다.

시스템 A가 출력을 생성하는 속도가 시스템 B가 처리 할 수있는 속도보다 일시적으로 큰 경우 대기열 솔루션을 구현해야합니다. 시스템 A는 출력을 대기열에 저장하고 시스템 B는 대기열의 항목을 팝합니다.

0

Java Messaging Service (JMS)와 같은 솔루션을 사용할 수 있습니다.

http://java.sun.com/products/jms/

이 메시지 큐를 통해 비동기 통신을 허용한다. 시스템 A와 B는 서로 완전히 독립적이며 동일한 속도로 메시지를 처리 ​​할 필요가 없습니다.

1

2 구별하는 경우가있다 :

  • 시스템은 영구적으로 처리 B
  • 시스템 A가 일괄 적으로 데이터를 생성 할 수있는 것보다 더 빠른 데이터를 생성한다; 예를 들면B보다 처리 할 수있는 하루가

두 번째 경우는 대기열 (JMS)로 해결할 수 있습니다. 첫 번째 경우는 더 어렵습니다.

B에서 하드웨어를 충분히 확장 할 수 있다면 이동하는 것보다 더 낫습니다.

B의 가장 느린 부분을 최적화 (코드 최적화) 할 수 있지만 모든 종류의 테스트를 다시해야합니다.

여러 B (로드 균형 조정)로 작업 할 수 있는지 확인할 수 있지만 응용 프로그램이이를 지원해야합니다 (DB의 동일한 데이터를 업데이트하는 여러 인스턴스가 좋지 않음 :).

모두 부하 분산 및 응용 프로그램의 아키텍처에 따라 다릅니다.

0

시스템 B의 시스템 출력은 어떻게 제공됩니까? 다른 JVM에 있으면 운영 체제 파이프를 사용할 수 있습니다. 예 :

java SystemA | java SystemB 

OS는 SystemB보다 너무 빨리 벗어나면 SystemA를 자동으로 일시 중단합니다. 동일한 JVM에 있다면, PipeInputStream과 PipeOutputStream을 사용하여 동일한 결과를 얻을 수 있습니다.

SystemA의 출력이 스트림이 아닌 경우 다른 답변에서 제안 된 것과 같이 일종의 구조화 된 데이터 접근 방식을 사용해야합니다.

+0

덕분에 adrain,하지만 파이프의 논리가 필요합니다. 시스템 b의 한계를 안다. –