안전한 병렬 처리를 구현하기 위해 고유성 유형 사용


19

나는 한동안 순수한 기능 언어로 된 모나드에 대한 대안으로 고유성 유형에 관심이 있었다. 불행히도 이것은 CS 연구의 난해한 영역이며 고유 유형을 가진 프로그래밍에 관한 온라인 리소스는 거의 없습니다.

참조 ( "상자") 및 배열과 같은 상태 저장 데이터 구조를 구현하는 데 고유성 유형을 사용하는 방법은 분명하지만 다른 일반적인 상태 저장 데이터 구조를 구현하는 방법은 이스케이프 처리되지 않습니다.

예를 들어 고유 한 유형으로 잠금을 구현할 수 있습니까? 스레드간에 변경 가능한 데이터를 공유하기 위해 고유성 유형을 사용할 수 있습니까? 고유 한 유형을 사용하여 동기화 기본 요소 (예 : 뮤텍스)를 빌드 할 수 있습니까? 아니면 메시지 전달이 필요합니까?


질문을 좀 더 구체적으로 만들 수 있습니까? 예를 들어, 고유 한 유형의 잠금에 대해 이미 알고있는 지식과 지식이 부족한 곳은 무엇입니까?
Robert Harvey

> 예를 들어, 고유 한 유형으로 잠금에 대해 이미 알고있는 것 고유 한 유형으로 잠금에 대해 아무것도 몰랐습니다. 유일한 유형으로 병렬 처리가 어떻게 안전한지 잘 모르겠습니다. 주제에 대한 모든 자료입니다.
Ricky Stewart


2
@RickyStewart : 이미 Clean ( wiki.clean.cs.ru.nl/Clean )을 알고있을 것입니다 . 언급하지 않았기 때문에 링크를 추가하고 싶었습니다.
Giorgio

나는 병렬 처리를 위해 선형 유형을 조사해야한다고 생각합니다. IIRC 고유성 유형은 선형 유형을 기반으로합니다. 프랭크 페닝이 주제에 대한 몇 가지 흥미로운 물건을 가지고
다니엘 Gratzer에게

답변:


2

예를 들어 고유 한 유형으로 잠금을 구현할 수 있습니까?

나는 로버트 하비가 제공 한 링크를 따랐고 나는 빠른 읽기를했다. 나는 모든 것을 이해했다고 말할 수 없으며 , 내가 이해 한다고 생각 하는 것을 실제로 이해 했다는 높은 수준의 자신감을 가지고 있다고 말할 수는 없지만 외부 고유성과 참조 불변성의 모든 요점은 잠금이 필요하지 않은 것으로 보입니다.

멀티 스레딩에 대한 현대적인 접근 방식은 숙련 된 프로그래머 만 잠금을 사용하는 코드를 작성할 수 있고 코드에도 버그가 발생하기 때문에 잠금을 피하려고합니다. 잠금 코드가 실제로 테스트 할 수 없다는 사실을 덧붙이는 경우, 코드를 잠금 해제하는 것이 바람직하지 않은 방법이라는 것이 분명해야하며 잠금 해제를 목표로하는 모든 솔루션이 가장 유망합니다.

잠금을 피하는 방법은 메시지 전달을 사용하는 것이므로 메시지를 변경할 수 없어야합니다. 대략, 언뜻 보면, 참조 불변성은 불변 유형을 실제로 구성하지 않고도 불변성을 보장 할 수있는 기술인 것으로 보이며 외부 고유성은 엄격한 불변성 요구 사항을 로컬에서 완화하는 데 도움이되는 기술인 것으로 보입니다.

스레드간에 변경 가능한 데이터를 공유하기 위해 고유성 유형을 사용할 수 있습니까?

이 논문은 명확하게 언급하지 않았지만, 내가 이해에서, 객체의 외부 고유의 클러스터 (정말 때문에 어떻게 든 스레드 안전 ? 어떻게 이 객체의 클러스터, 수단에 단 하나의 외부 참조가 존재한다는 것을 보장) 그 이러한 참조를받는 스레드는 다른 스레드가 다른 참조를 가질 수 없기 때문에 다른 스레드도이를 변경할 수 있다는 걱정없이 참조 된 오브젝트를 변경 가능한 것으로 처리 할 수 ​​있습니다. 그런 이론적 구성이 어떻게 구현되고 시행 될 수 있는지 궁금합니다.

고유 한 유형을 사용하여 동기화 기본 요소 (예 : 뮤텍스)를 빌드 할 수 있습니까? 아니면 메시지 전달이 필요합니까?

다시 말하지만, 외부 적으로 고유 한 유형과 참조 불변성은 잠금, 뮤텍스 등을 불필요하게 렌더링하는 것을 의미합니다. 메시지 전달이 좋은 방법으로 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.