2010-06-15 5 views
3

.NET 4에는 새로운 동시 데이터 구조가 포함되어 있습니다. Bag과 Dictionary 콜렉션에는 분명한 애플리케이션이 있지만 Queue and Stack 데이터 구조에는 사용할 수 없습니다. 이들을 사용하는 사람들은 무엇입니까?.NET 4의 동시 대기열 및 스택 응용 프로그램

또한 링크 된 목록을 기반으로 한 디자인이 많은 할당을 초래하고 확장 성을 파괴한다는 것을 알았습니다. 이 콜렉션의 유일한 목적이 멀티 코어 프로그래밍이라는 점을 감안하면 놀랍습니다. 이것은 고유의 한계입니까 아니면 잘못 구현 된 것입니까?

+0

, 당신은 연결리스트를 참조하는이 ConcurrentQueue을 구현하는 데 사용되는? 그 말이 맞는 것 같지 않습니다. –

+0

@chibacity : 예, Joe Duffy의 저서에 따르면 ConcurrentQueue를 구현하는 데 사용되는 연결된 목록을 언급하고 있습니다. –

+0

나는 비트들을 해독하는 무차별 적 접근을 취했다. –

답변

0

.Net 4.0의 동시 콜렉션 구현은 잠금 해제를 시도하지만 여전히 비 잠금 해제 메모리 할당 서브 시스템의 최상위에 앉아 있지만 질문의 두 번째 부분을 처리하는 것이 좋습니다.

메모리 관리는 모든 잠금이없는 데이터 구조의 골칫거리입니다 : 여기에 예술의 상태에 좋은 프리젠 테이션은 다음과 같습니다 http://sysrun.haifa.il.ibm.com/hrl/ISMM2009/program.html#7

결론은이 지역이 매우 많은 연구가 진행 중이라는 점이다 .Net과 같은 광범위한 배포 프로덕션 플랫폼에 포함될 준비가되지 않았을 수도 있습니다.

+0

이것은 미친 짓입니다. 당신의보기 흉한 대답은 총 헛소리 응답에 8 개의 상향 회의가있을 때 하향 투표됩니다. WTF?! –

3

대기열에 대한 상당히 분명한 시나리오는 작업 항목을 대기열에 넣는 하나 이상의 스레드와 동시 처리를 위해 여러 작업자 스레드를 추출하는 것입니다.

나는 링크드 기반의 디자인이 자물쇠가 없다고 생각한다. 그 확장성에 어떤 문제가 있으며 어떤 다른 옵션을 염두에 두셨습니까?

+0

@Pavel :'ConcurrentBag'는'ConcurrentQueue'보다 시나리오에 더 적합하지 않습니까? –

+0

@ 존 : 그것은 달라집니다. 처리 순서를 대략 보존하려면 CQ가 CB보다 더 적합합니다. –

+0

@Reed : 그리고 어떤 실제 시나리오에서 "대략적으로 명령을 보존"하고 싶습니까? –

11

스택 및 대기열은 순차 프로그래밍과 마찬가지로 동시 프로그래밍에서 매우 유용합니다.

새로운 ConcurrentQueue<T>ConcurrentStack<T> 클래스는 대기열 및 스택의 스레드로부터 안전하게 구현됩니다. 두 클래스 모두 잠금이없고 (확장 성이 뛰어남) 스레드가 안전하고 성능이 뛰어나므로 다중 스레드 생성자/소비자 시나리오를 처리 할 때 특히 유용합니다.

또한 한 가지 지적하고 싶습니다. 두 번째 단락에는 두 가지 오해가 있습니다. 링크 된 목록은 특히 확장성에 좋지 않습니다. 메모리 할당 ~은 정기적으로 발생해야 할 수도 있지만 (때로는이를 해결할 수있는 방법이 있지만), 확장 성면에서 다른 잠재적 인 문제보다 비용이 적게 듭니다. (이것은 시나리오에 따라 달라집니다 ...) 또한 새로운 ConcurrentQueue<T>ConcurrentStack<T> 클래스는 (적어도 전통적 인) 연결 목록을 기반으로하지 않습니다. 그들은 내부적으로 요소를 보유하기 위해 연결된 배열리스트를 내부적으로 사용하는 잠금없는 클래스입니다. std::deque과 같습니다.

+2

흠, CQ가 분명합니다. 그러나 동시 프로그래밍의 LIFO에는 실제 생활 예제가 필요합니다. 너 하나있어? –

+0

@ 한스 : LIFO 동시 발생이 꽤 이상하다는 데 동의합니다. 저는 개인적으로 그것을 결코 필요로하지 않았습니다 (비록 CQ를 많이 사용합니다). 단일 소비자 스레드가있는 단일 제작자 스레드는 일반/스택 시나리오처럼 CS를 사용할 수 있지만 시스템이 필요한 경우 Push()/TryPop()를 통해 잠금을 피할 수 있습니다. 컬렉션. 일반. 스택 이 사용되었습니다. –

+0

그것은 내가 아니었지만, 나는 스택에 "믿을 수 없을만큼 유용"하다고 생각했다. –

관련 문제