문제

어떤 장점과 단점의 파일을 사용하여 프로세스 간의 통신?자에게 약간의 배경은 컨텍스트에 나는 이 질문을합니다.

문제는 고전적인 프로듀서 소비자 문제와 일부 제약 조건이 있습니다.생산자는 협력에서 실행되는 프로세스는 클러스터의 컴퓨터와 통신을 사용하여 다른 방송에서도 동일하게 적용됩니다.각 프로세스는 사용자가 지역는 그것에 대해 알고 있고 또한할 수 있는 다른 프로세스에 대해 알아들여 위의 방송 메커니즘이 있습니다.지금까지의 상태 정보를 방송/공유되지 않았고 지속되지만 그것은 지금 해야 합니다.

이 시스템의 실행에서 생산한 지원 사용자의 수천 그리고 사람들은 understandbly 매우 불안 추가에 대해 여분의 종속성을 이 추가 지원한 지속성을 알려준다.경로 우리가 선택한 산란 새로운 스레드에서 기존 프로세스는 씁니다 로컬 트래픽 파일의 파일시스템에서는 다음을 읽으로 새로운 프로세스(을 수 있는 소비자)과 유지됩니다.장점이 우리는 이 방법으로는:

  1. 우리는 지속성에 대한 무료입니다.Incase 새로운 프로세스가 우리가 잃어버린 어떤 지역 트래픽으로 우리는 그것을 쓰는 파일 시스템입니다.으로 소비자가 알고있는 그 때마다,그것은 그것을 시작할 수 있습니다.
  2. 학습을 위해 사용하는 큐 라이브러리의 이전 일반 유닉스 파일 IO.
  3. 가장 큰 프로 하는 우리에 영향을 미치는 현재 프로듀서 프로세스에서는 모든 제외하고,새로운 스레드한 파일에 쓴다.

문제의 일부와 이 접근 방식은:

  1. 파일 잠금 및 경쟁하고 그 영향을 미치고 있습니다.
  2. 확인하고 쓰기의 버퍼가 러시고 프로듀서만 자료 파일 잠금을 한번은 전체 이벤트 파일에 기록됩니다.소비자 읽어야 하는 불완전한 기록합니다.

생각?이 접근하는 순진하고 우리는 단지 초기 비용을 위해 시간을 사용하기 위한 선반을 지속적 라이브러리 큐?주요 포인트는 여기에는 우리가 가능한 최소한의 영향에 현재 프로세스의 추가 전혀 사용하지 않습니다.

도움이 되었습니까?

해결책

었으로 직면 이 선택은 최근 및 학습을 고려에 대해 충분히 Berkeley DB 를 사용하는 큐 메커니즘이 있습니다.그러나 궁극적으로 나가기로 결정했고 대신 사용하는 유닉스 파일시스템과 쓰 내의 원자 큐 프리미티브Posix 세마포.는 경우 모든 프로세스는 한 컴퓨터에서 이것은 매우 쉽습니다.원자 넣어 기능에 대한 다스 라인의 코드원자 얻을 수 있기 때문에 기다려면 대기열이 비어 있는가에 대해 세 번 크기입니다.

나의 조언은 당신 디자인하는 원자 큐 API 는 숨길 것입니다.(고전적인 예는 다음과 같은 파르나스의의 조언을 인터페이스를 사용하여 숨을 디자인하는 세부 사항이 변경될 수 있습니다.) 당신이 할 수 있는 첫 번째 버전의 API 를 사용하여 일반 유닉스 파일 I/O.할 수 있습니다 다음을 시도 변화 같은 잠금,Berkeley DB,또는 세마포---으로 모든"에 미치는 영향을 최소재 프로세스".

당신은 알 수 없이 성능에 미치는 영향을 시도할 때까지 무언가이다.파일 잠금에서 실제 파일 시스템은 매우 좋은;파일 잠금에 NFS 곰입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top