개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
동시성과 병렬성
공유 상태 없는 동시성을 위하여 액터를 사용하라.
칠판 시스템
TIL (Today I Learned) 날짜
2022.03.29
오늘 읽은 범위
6장. 동시성
책에서 기억하고 싶은 내용을 써보세요.
동시성(Concurrency): 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것
병렬성(Parallelism): 실제로 동시에 실행되는것
모든 일에는 동시성이 있다. 여러분의 애플리케이션이 실제 세상을 다루기 원한다면 동시성은 필수다. 세상은 비동기적이기 때문이다.
동시성이나 병렬성을 지원하는 코드를 쓰는 건 왜 어려울까? 한가지 이유는 우리가 프로그래밍을 순차적 시스템으로 배워서다. 순차적으로 사용할 땐 비교적 안전하지만, 동시에 두가지 일이 일어날 수 있으면 골칫거리로 변해서다. 가장 큰 문제는 공유상태다.
액터 모델은 프로세스들이 독립적으로 수행되며 서로 데이터를 공유하지 않는다. 대신 채널을 통해 잘 정의된 단순한 의미론을 사용하여 의사소통한다. 언제나 동시성을 띤다
동시에 일어나도 되는 게 뭐고, 반드시 순서대로 일어나야 하는 건 어떤 것인지 찾아내길 원한다. '활동 다이어그램' 같은 표기법을 사용해서 작업 흐름을 기록하는 것이 한 방법이다.
공유 상태는 틀린 상태다. (레스토랑의 애플파이)
공유 리소스에 독점적으로 접근하는 것을 도와주는 라이브러리가 있다. 상호 배제를 의미하는 뮤텍스mutex, 모니터, 세마포어 등..
칠판에는 누구나 수집한 사실을 붙이고 누군가는 떼어 낸다. 사실을 조합하거나 처리할 수도 있고 더 많은 정보를 덧붙일 수도 있다. 칠판은 사람들이 서서히 결론에 도달하도록 돕는다.
칠판 시스템은 법적 요구 사항을 캡슐화하는 규칙 엔진과 함께 사용하면 우아하게 해결할 수 있다. 데이터의 도착 순서는 이제 상관없다. 어떤 사실이 칠판에 올라가면 적절한 규칙이 발동되도록 하면 된다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
JAVA에서 배웠던 트랙잭션 처리를 nestjs에서 어떻게 처리 해야하는지 공부 해야할것 같다.
순차적으로 배워왔어도 동시성과 병렬성을 고려하며 사고할 수 있어야 할 것 같다.
아침에 일어나서 출근하기 까지의 행동들을 행동 다이어그램으로 그려보고 싶다. (그럼 조금 더 효율적으로 시간을 쓸 수 있겠지?)