구조화된 동시성

Structured concurrency

구조화된 동시성동시 프로그래밍에 대한 구조화된 접근법을 사용하여 컴퓨터 프로그램의 명확성, 품질 및 개발 시간을 향상시키는 것을 목적으로 하는 프로그래밍 패러다임이다.

핵심 개념은 명확한 진입점과 출구 지점을 가지고 있고 모든 생성된 스레드가 종료 전에 완료되었는지 확인하는 제어 흐름 구조를 통해 동시 실행 스레드 캡슐화(여기서 커널 및 사용자랜드 스레드 및 프로세스 포함)이다.그러한 캡슐화는 동시 스레드의 오류를 제어 구조의 상위 범위로 전파하고 각 특정 컴퓨터 언어의 고유 오류 처리 메커니즘에 의해 관리할 수 있게 한다.동시성이 존재함에도 불구하고 소스 코드의 구조에 의해 제어 흐름이 쉽게 뚜렷하게 유지되도록 한다.효과적이 되려면 이 모델은 프로그램의 모든 레벨에 걸쳐 일관성 있게 적용되어야 한다. 그렇지 않으면 동시 스레드가 누출되거나 고아가 되거나 런타임 오류가 올바르게 전파되지 않을 수 있다.

구조화된 동시성은 순차 문과 서브루틴을 캡슐화한 제어 흐름 구조를 도입한 구조화된 프로그래밍과 유사하다.

역사

OpenMP와 같은 멀티프로세싱 도구로 구현된 1960년대 포크-조인 모델은 모든 스레드가 종료되기 전에 완료되었는지 확인하는 시스템의 초기 사례다.그러나, 스미스는 이 모델은 프로그래밍 언어가 결합 행동을 알지 못하기 때문에 진정한 구조화된 동시성이 아니며, 따라서 안전을 강제할 수 없다고 주장한다.[1]

이 개념은 2016년 마틴 수스트릭(제로MQ 크리에이터)이 자신의 C 라이브러리 libdill과 함께 고루틴을 출발점으로 삼아 공식화한 것이다.[2]2018년 나다니엘 J. 스미스가 파이썬 트리오라는 자신의 파이썬 구현에서 '귀여운 패턴'을 도입한 것에 의해 더욱 정제됐다.[1]한편, 로마 엘리자로프는 코틀린어를 위한 실험적인 코루틴 도서관을 개발하면서 독립적으로 같은 생각을 하게 되었고,[3][4] 후에 표준 도서관이 되었다.[5]

2021년 스위프트는 구조화된 동시성을 채택했다.[6]그 해 말, 자바에 구조화된 동시성을 추가하기 위한 제안 초안이 발표되었다.[7]

변형

주요 변동 지점은 동시 스레드 트리의 한 멤버에서 오류를 처리하는 방법이다.간단한 구현은 오류가 발생한 스레드의 자식과 형제자매가 완료되기까지 기다렸다가 오류를 상위 범위로 전파할 뿐이다.그러나, 그것은 무한정 많은 시간이 걸릴 수 있다.대안은 일반적인 취소 메커니즘(일반적으로 프로그램 불변자를 존중할 수 있도록 하는 협력적 계획)을 채택하여 어린이와 형제자매의 스레드를 편법으로 종료하는 것이다.

참고 항목

참조

  1. ^ a b Smith, Nathaniel J. (25 April 2018). "Notes on structured concurrency, or: Go statement considered harmful". Retrieved 1 August 2019.
  2. ^ Sústrik, Martin (7 February 2016). "Structured Concurrency". Retrieved 1 August 2019.
  3. ^ Elizarov, Roman (12 September 2018). "Structured concurrency". Retrieved 21 September 2019.
  4. ^ Elizarov, Roman (11 July 2019). Structured concurrency (Video). Hydra Distributed computing conference. 42 minutes in. Retrieved 21 September 2019. We needed a name and we needed to finalize this whole concept [...] and we stumble onto this blog post [...] by Nathaniel J. Smith.
  5. ^ "Coroutines basics: Structured concurrency". Kotlin. JetBrains. Retrieved 3 March 2022.
  6. ^ McCall, John; Groff, Joe; Gregor, Doug; Malawski, Konrad. "Swift Structured Concurrency Proposal". Apple's Swift Evolution repo. GitHub. Retrieved 3 March 2022.
  7. ^ Pressler, Ron. "JEP draft: Structured Concurrency (Incubator)". OpenJDK. Oracle. Retrieved 3 March 2022.

외부 링크