ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 동시성 컬렉션 사용
    @ 17. 1 ~ 18/C# 멀티스레드 2017. 8. 20. 04:27

    동시성 계산의 경우 적절한 데이터 구조가 필요함.

    이 데이터 구조는 확장성이 있으며 최대한 잠금을 피하는 동시에 스레드에 안정한 접근을 제공해야한다.

    닷넷 프레임워크 버전 4에는 여러 데이터 구조를 포함한 System.Collections.Concurrent네임스페이스가 있다.


    ConcurrentQueue

    비교하고 둘을 바꾸는 CAS 원자 연산과 SpinWait를 사용하며 스레드에 안전함을 보장한다.

    당연히 선입 선출.


    ConcurrentStack 

    어떠한 잠금을 사용하지 않은 채 CAS 연산만으로도 구현된다.

    당연히 후입 선출


    ConcurrentDictionary

    스레드에 안전한 딕셔너리 컬렉션

    읽기 연산에는 잠금이 필요 없지만 쓰기 연산에는 잠금이 필요하다. 

    쓰기 연산에서는 잠금을 이용한 일반 딕셔너리에 비해 상당히 느리지만,

    조회 연산에서는 더 빠르다. 

    딕셔너리로부터 많은 스레드에 안전함이 필요하다면 적합하다.

    왜냐면 작은 단위 잠금 기술을 이용해 구현되고 일반 딕셔너리를 일반 잠금과 함께 사용(큰 단위 잠금)할때보다 다중 쓰기에 더 나은 확장을 허용한다. 한 스레드만 사용할 때 동시성 딕셔너리는 훨씬 더 느리지만, 대여섯 스레드로 늘리면 동시성 딕셔너리가 실제로더 잘 수행한다.



    '@ 17. 1 ~ 18 > C# 멀티스레드' 카테고리의 다른 글

    읽기 / 쓰기 락  (0) 2018.06.27
    스레드 로컬 저장소  (0) 2018.06.21
    스레드 동기화란?  (0) 2018.03.05
    async, await에 대한 설명  (0) 2017.08.19
    데드락 걸리는 async 코드  (0) 2017.08.19
Designed by Tistory.