일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 송고버섯피자
- 루스틱
- Zone2
- 런데이애플워치
- 재택커피
- 콜드브루메이커
- 중사랑
- sparksql
- 여행
- 저동하녹
- neovim
- kafka-connect
- 마이더치콜드브루
- 플라스틱은 어떻게 브랜드의 무기가 되는가
- 런데이
- 이코노미스트한국구독센터
- 집커피
- 가람집옹심이
- 강릉여행
- parquet
- apollo-server-v3
- apollo-sandbox
- sky빛의아이들
- 달리기
- 잘쉬어야지
- 오운완
- 스타벅스리저브콜드브루
- 티지아이포럼
- 여니브레드
- schema-registry
- Today
- Total
해뜨기전에자자
declarative concurrency 선언적 동시성 본문
요즘 언어의 패러다임은 thread를 이용하여 비결정적 concurrency를 확보하기보다는 언어 자체에서 control flow를 가져가 declarative concurrency를 가져가 컨트롤을 결정적으로 하고, 결과를 예상할 수 있도록 하는 것이다.
computation은 내부적으로 비결정론적인 실행 경로를 가질 수 있지만, 비결정론은 computation 모델에 의해 추상화 될 수 있으며 외부에서는 관찰 할 수 없다. concurrent computation의 비결정론적 인터리빙은 동시성 모델링의 복잡성의 주요 원천이며, 관측 가능한 비결정론은 일반적으로 동시성 모델에서 바람직하지 않은 속성으로, 재현 불가능한 오류 상태를 초래한다.
race condition은 일반적인 비결정적 모델의 하나의 예로, 같은 메모리 위치를 지정되지 않은 순서로 동시에 액세스하고 업데이트하는 것과 같이, 공유 리소스에 대해 제어할 수 없는 경합을 나타낸다 (데이터 경쟁). 의도하지 않은 레이스 조건은 어려운 디버깅 문제를 만든다. 상태와 타이밍으로 인해 재생산하기가 어렵거나 불가능할 수 있기 때문이다 (반복 불가능).
동시성 모델링의 비결정성을 해결하기 위해서는 lock 같은 동시성 제어 primitive를 사용해왔다. 큰 단위의(coarse-grained granularity) lock는 결정적 실행을 위해 concurrency를 교환하고, 세부적으로 거는(fine-grained granularity) lock은 덜 예측 가능한 대신 더 동시적으로 실행될 수 있다.
선언적 동시성 declarative concurrency 모델은 데이터 의존 기반의 실행 순서를 노출 시키는 것이다. 즉 관찰 가능한 결정성을 위해서 공유되는 mutable state의 표현성을 포기하는 것이다. 그로 인해 동시성과 정확성 간의 절충을 할 필요가 없게 만든다. 선언적 동시성의 예로, continuous time 컨셉을 기반으로 한 순서 제약을 노출하는 Conal Elliot이 정의한 Functional reactive progrqmming(FRP)이 있다.
ref: https://slikts.github.io/concurrency-glossary/?id=control-flow-vs-dataflow-imperative-vs-declarative
'개발 > design & pattern' 카테고리의 다른 글
DDD (0) | 2018.10.28 |
---|