문제

Ruby에서 몇 가지 인스턴스 변수를 공유하는 고도로 멀티 스레드 앱이 있습니다. 이 변수에 대한 쓰기는 드물지만 (1%) 읽기는 매우 일반적입니다 (99%). 이러한 스레드가 항상 최신의 가장 최신 값을 볼 수 있도록하는 가장 좋은 방법 (귀하의 의견이나 관용적 루비 패션)은 무엇입니까? 지금까지 내가 가진 몇 가지 아이디어가 있습니다 (이것을 점검하기 전에 귀하의 의견을 원하지만) :

  • 이러한 변수를 읽거나 쓰기 전에 대부분 사용하는 잠금 장치가 있습니다 ( 실제로 Java 동시성). 이것의 단점은 synchronize 내 코드의 블록이 있으면 피할 수있는 쉬운 방법이 없습니다.
  • 루비를 사용하십시오 freeze 방법 (참조 여기), 그것은 똑같이 번거롭게 보이지만 첫 번째 옵션이 제공하는 동기화 이점을 제공하지는 않지만.

이러한 옵션은 모두 비슷해 보이지만 다른 사람이 더 나은 아이디어를 가질 수 있기를 바랍니다. 나는 또한 물체를 불변으로 만드는 것도 괜찮을 정도로 괜찮을 것입니다. 이 질문 물체는 매우 변한 적이 있다고 주장하는 것 같습니다.

도움이 되었습니까?

해결책

자물쇠를 사용하는 것이 가장 적합한 방법입니다. Jim Weirich 의이 프레젠테이션을 주제에 대해 볼 수 있습니다. 모든 루바이스트가 스레딩에 대해 알아야 할 것.

또한 객체를 동결하면 이러한 변수를 수정하려면 여기에서 도움이되지 않습니다. 그것들을 제자리에 얼리는 것은 그것을 의미합니다 더 이상 수정할 수 없습니다 (따라서 글의 1%가 작동하지 않습니다).

다른 팁

직접 사용하지 않았지만 체크 아웃하고 싶을 수도 있습니다. 데이터 흐름. 모든 변수가 쓰기 온스를 만듭니다.

독자 작성자 잠금 장치는 잘 정의 된 솔루션의 일반적인 문제입니다.

독자 작가 잠금

그리고 IT의 많은 구현이 있습니다.

잠금 패턴을 작성하십시오

각 읽기/쓰기에 대해 잠금을 입히고 싶지 않습니다.

공유 상태에 대한 액세스를 동기화하려면 뮤트를 사용해야합니다. 이 일을 피할 방법이 없습니다.

최신 멀티 코어 머신에서 메모리에 액세스하는 방법 또는 메모리 액세스가 캐싱과 상호 작용하는 방법에 대한 가정을 할 수 없습니다.

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