2010-02-18 3 views
2

자바 입출력을 사용하면 새로운 프로세스를 포크하는 것이 스레드 B가 읽으려는 파일에 쓰는 경우 얻을 수있는 것보다 프로세스 A가 쓰는 데이터를 파일로 읽는 것이 더 효율적입니다. 같은 과정).Java 파일 시스템에서 어떤 동시성이 작동합니까?

규칙이 메모리 모델과 비교할 수없는 것처럼 보입니다. 그렇다면 파일 기반 동시성은 어떻게 작동합니까? 참고 문헌은 인정 될 것이다.

+0

"새로운 프로세스를 포크하면 프로세스 B가 데이터를 읽을 수있는 능력이 뛰어납니다"라는 결론에 어떻게 왔습니까? 모든 운영 체제에서 일관성이 있습니까? –

+0

리눅스 2.6.32에서 그런 식으로 작동합니다. 그게 내가 아는 전부 야. – krosenvold

+2

이 불일치를 보여주는 샘플 프로그램을 제공 할 수 있습니까? –

답변

4

이와 같은 관찰은 운영 체제마다 달라질 수 있으며 운영 체제 (커널)의 여러 버전에 따라 다를 수 있습니다. 여기서 다루는 것은 OS가 스레드를 구현하는 방식 및 스레드 스케줄링과 관련이있을 것입니다. Java 플랫폼은 이런 종류의 튜닝을 거의 제공하지 않습니다.

IMO, 이 필요하면 성능이 더 좋아야합니다. 파일을 동일한 JVM의 두 스레드 간의 데이터 전송 채널로 사용하면 안됩니다. 응용 프로그램을 코딩하여 스레드가 동일한 JVM에 배치되었는지 감지하고 Java Pipe 스트림을 사용하십시오.

0

아마도 스레드 및 프로세스 차단과 관련 될 수 있습니다.

프로세스가 리소스 (파일 쓰기/읽기)를 원할 때 프로세스는 S.O. 요구 사항을 충족시키고 프로세스에 무언가를 돌려줍니다.

hyperthreading을 사용하지 않는 경우 두 개의 스레드가있는 프로세스는 각 스레드를 완전히 채우는 두 스레드를 차단합니다. 하지만 당신이 그들을 분리한다면 아마도 S.O. 액세스를 최적화하고 읽기/쓰기를 병렬화 할 수 있습니다.

(추측으로 :)

관련 문제