2013-06-30 4 views
0

GUI가 외부 C++ 실행 파일과 상호 작용하는 Java 응용 프로그램을 만들었습니다.Java 버퍼 크기가 병목 현상입니까?

나는 ProcessBuilder를 사용하여 C++ 실행 파일에서 GUI로/아웃/오류를 만들고 첨부합니다. 1024 바이트 크기의 버퍼를 사용하고 있습니다. Java GUI가 1024 자의 charaters를 읽는 동안 C++이 매우 빠른 속도로 printf 문으로 실행되는 경우에는 어떻게 될까요? 이로 인해 병목 현상이 발생합니까?

public void run() 
{ 
     try 
     { 
      char[] buffer = new char[1024]; 
      for (int n = reader.read(); n != -1; n = reader.read(buffer)) 
      { 
       writeBytes2Text(buffer, 0, n); 
      } 
     } 
     catch (Exception x) 
     { 
      //some exception 
     } 
    } 

답변

0

버퍼의 크기와 상관없이 병목 현상이 발생합니다. 가능한 유일한 방법은 가능한 한 자바 측을 최적화하는 것입니다. 예를 들어 시간 간격을 줄이기 위해 필요한만큼 버퍼링하여 잘 간격을 둔 간격으로 GUI를 업데이트하십시오. 대개 덜 빈번하고 거친 업데이트는 처리량을 향상시킵니다.

0

1024 바이트 버퍼 크기가 좋지만 4096이 약간 더 좋을 수 있습니다.

대부분의 지연은 문맥 전환, 잠자기 및 깨우기 스레드에서 발생합니다. Java 측 버퍼 크기가 훨씬 작지 않으면 처리량 문제가 발생하지 않습니다.

C++ 출력 스트림은 기본 4096 바이트 출력 버퍼로 작동 할 것입니다. C++ 프로세스가 출력을 느리게 출력하면 4096 바이트가 누적 될 때까지 아무 것도 출력되지 않습니다.

관련 문제