2010-02-19 7 views
2

다음과 같은 시나리오가 있습니다 :
이 프로그램에는 외부 응용 프로그램 인 소켓에 대한 판독기 및 기록기 스레드가 있습니다. 리더와 작성자는 주기적으로 작업해야합니다.
작성자는 동적 숫자의 메시지 (x)를 소켓에 보내고 판독기는 소켓에서 응답을 읽어야합니다. 메시지 수는 사이클 당 5에서 10k가 넘습니다. 메시지는 보낸 순서와 동일한 순서로 수신되지 않으며 메시지의 레이아웃이 명확하므로 단일 메시지를 결정할 수 있습니다.
독자는 x 메시지를 읽고 다음에 몇 가지 처리를 수행해야합니다. 판독기가 판독 후 처리를 수행 한 후에, 기록기는 소켓으로의 송신을 다시 시작해야한다.
pov에서 가장 빠른 동기화는 무엇입니까? 기록 된 메시지의 번호와 소켓에 특별한 메시지 보내기
가장 빠른 동기화

  • ? (소켓에 FIFO 보증이없는 경우에도)
  • 클래식 잠금 객체로 작업 하시겠습니까?
  • 정수에 대해 쓰여진 메시지 수가있는 원자 트랜잭션을 사용하고 작성기가 정수를 한 번만 업데이트 할 수있게 하시겠습니까?

    다른 빠른 동기화 메커니즘을 놓친 적이 있습니까?

+0

메시지를 순차적으로 처리해야합니까? 첫 번째 * x * 메시지가 다음 * x * 메시지에 어떤 영향을 줍니까? 그리고 한 메시지가 끝나고 다음 메시지가 시작되는 위치를 결정하는 메커니즘은 무엇입니까? – Aaronaught

+0

필자는 다른 공유 상태를 피했습니다. 따라서 작성자는주기를 시작해야하고 독자는주기를 끝내야합니다. 다른 종속성은 공유되지 않습니다. 소켓 통신을 처리하기 위해 손으로 만든 mock 객체로 작동하는 성능 테스트 코드를 작성해야하지만, 동기화를위한 다른 아이디어가있을 수도 있습니다. – weismat

답변

3

초당 100,000 회 수행하지 않는 한 어떤 메커니즘이 다른 메커니즘보다 몇 초 빠른지는 중요하지 않습니다. 이해하기 쉽고 작동하기 쉬운 메커니즘을 사용하십시오. 그런 다음 충분히 빠르지 않은 것으로 판명 된 경우에만 메커니즘 최적화를 고려하십시오. 메시지 처리 자체가이 동기화보다 몇 시간 더 많은 시간을 사용하게 될 것입니다.

+0

정확히! 나는 똑같은 말을하려고했다 :) –

+0

나는 내 질문을 공식화하는데 좋지 않았다. - 각 읽기 후에 점검 할 필요가있다. 따라서 초당 수천 번, 실제주기/상태 변경은 매 1-2 초마다 발생합니다. – weismat