문제

저는 원격 호스트로 전송 해야하는 메시지에 대한 정보를 유지하는 대기열을 사용하는 프로젝트를 진행하고 있습니다. 이 경우 한 스레드는 큐에 정보를 넣을 책임이 있으며 다른 스레드는 대기열에서 정보를 가져 와서 전송해야합니다. 두 번째 스레드는 정보를 주기적으로 확인해야합니다.

그러나 나중에 나는 이것이 바퀴의 재창조라는 것을 알았다 :) 나는이 목적으로 차단 대기열을 사용할 수있다.

위의 응용 프로그램에 차단 대기열을 사용하면 다른 장점은 무엇입니까? (예 : 성능, 코드 수정, 특별 트릭 등)

도움이 되었습니까?

해결책

주요 장점은 a BlockingQueue 올바른 스레드 안전 구현을 제공합니다. 개발자는 수년간이 기능을 스스로 구현해 왔지만 올바르게 얻는 것은 까다 롭습니다. 이제 런타임에는 동시 전문가가 구현, 검토 및 유지 관리합니다.

대기열의 "차단"특성에는 몇 가지 장점이 있습니다. 첫째, 요소를 추가 할 때 큐 용량이 제한되어 있으면 메모리 소비도 제한됩니다. 또한 대기열 소비자가 생산자보다 훨씬 뒤쳐지면 요소를 추가하기 위해 기다려야하기 때문에 생산자는 자연스럽게 스로트됩니다. 대기열에서 요소를 가져올 때 주요 장점은 단순성입니다. 영원히 기다리는 것은 사소한 일이며, 지정된 시간 초과를 올바르게 기다리는 것은 조금 더 복잡합니다.

다른 팁

차단 대기열로 제거하는 핵심 사항은 '폴링'입니다. 이것은 당신이 말하는 곳입니다

이 경우 두 번째 스레드는 정보를 주기적으로 확인해야합니다.

불필요한 CPU 시간을 많이 사용하는 것은 매우 비효율적 일 수 있습니다. 또한 불필요한 대기 시간을 도입 할 수도 있습니다.

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