20220330_북이

권도토잠보·2022년 3월 30일
0

북이흥행홍

목록 보기
16/16
post-thumbnail

🪴ㅤTIL (DAY - 5)

2022.03.30

오늘 읽은 범위

👉ㅤ클린코드 6장.동시성

기억하고 싶은 내용ㅤ📕

'동시성(concurrency)은 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인것 처럼 행동하는 것이다.
그리고 '병렬성(parallelism)'이란 실제로 동시에 실행되는 것이다. (p.241)

여러분의 애플리케이션이 실제 세상을 다루기 원한다면 동시성은 필수다. 세상은 비동기적이기 때문이다. (p.242)

동시성이나 병렬성을 지원하는 코드를 쓰는 건 왜 그렇게 어려울까? 한 가지 이유는 우리가 프로그래밍을 순차적 시스템으로 배워서다. 그리고 우리가 쓰는 언어의 기능이 순차적으로 사용할 때는 비교적 안전하지만, 동시에 두 가지 일이 일어날 수 있으면 골칫거리로 변해서다. (p.242)

액터 모델에서는 프로세스들이 독립적으로 수행되며 서로 데이터를 공유하지 않는다. (p.243)

시간에는 우리가 신경 써야 할 측면이 두 가지 있는데, 동시성(동시에 일어나는 일들)과 순서(시간의 흐름 속에서 일들의 상대적인 위치)다. (p.243)

사람들의 사고방식이 대기 그렇다. '이것을 하고, 그런 다음에 저것을 하고.' 하지만 이런 식으로 생각하다 보면 시간적 결합을 만들게 된다. (p.244)

우리는 동시에 일어나도 되는 게 뭐고, 반드시 순서대로 일어나야 하는 건 어떤 것인지 찾아내길 원한다. '활동 다이어 그램(activity diagram)'같은 표기법을 사용해서 작업 흐름을 기록하는 것이 한 방법이다. (p.244)

작업 흐름 분석으로 동시성을 개선하라. (p.244)

데이터베이스를 조회할 때나 외부 서비스에 접근할 때, 사용자 입력을 기다릴 때 같이 우리 프로그램이 다른 작업이 끝나기를 기다려야 하는 상황 말이다. 이런 순간이 바로 CPU가 손가락만 빨면서 기다리는 대신 좀 더 생산적인 일을 할 수 있는 기회다. (p.247)

동시성은 소프트웨어 동작 방식이고, 병렬성은 하드웨어가 하는 것이다. (p.247)

공유 상태는 틀린 상태다. (p.249)

세마포어(semaphore)는 단순히 한 번에 한 사람만이 가질 수 있는 무언가다. 여러분은 세마포어를 만들어서 다른 리소스의 사용을 제어하는 데 쓸 수 있다. (p.251)

불규칙한 실패는 동시성 문제인 경우가 많다. (p.257)

리소스를 공유하는 환경에서 동시성은 어렵다. 이 문제를 직접 풀려고 한다면 고난의 연속일 것 이다.
그래서 다음 오래된 농담을 음미해보기를 추천하는 것이다.
의사 선생님, 이렇게 하면 아파요.
그러면 그렇게 하지 마세요.... (p.258)

'액터'는 자신만의 비공개 지역 상태(state)를 가진 독립적인 가상 처리 장치(virtual processor)다.

  • 액터를 관리하는 것이 하나도 없다. 다음에 무엇을 하라고 계획을 세우거나, 정보를 입력 데이터에서 최종 결과로 바꾸는 과정을 조율하는 것이 없다.
  • 시스템의 저장하는 상태는 오직 메세지 그리고 각 액터의 지역 상태뿐이다.
  • 모든 메시지는 일방향이다. 답장이란 개념은 없다.
  • 액터는 각 메세지를 끝날 때까지 처리하고 중간에 다른 일을 하지 않는다.

'프로세스'는 본래 더 일반적인 가상 처리기로, 보통 운영 체제가 동시성을 지원하기 위하여 구현한다. (p.259)

공유 상태 없는 동시성을 위하여 액터를 사용하라. (p.260)

자바스크립트의 객체는 맵처럼 사용할 수 있는데, 객체의 키에 액터가 받을 메세지를 지정하고, 값에 해당 메시자가 도착했을 때 실행할 함수를 지정한다. 이 객체를 래퍼 함수에 넘기면 액터를 만들어 준다. 대부분의 액터 시스템이 유사한 구조를 갖는데 세부 사항은 구현 언어에 따라 다르다.

액터 모델에서는 동시성을 다루는 코드를 쓸 필요가 없다. 공유된 상태가 없기 때문이다. 명시적으로 처음부터 끝까지 "이걸 한 다음 저걸 하라"는 코드를 쓸 필요도 없다. (p.265)

오늘 읽은 소감ㅤ📙

클린코드에 이어서 이 책에서도 '동시성'에 관한 내용이 나왔다.
아직 공부를 제대로 하지 않아서 그런가 이 부분이 왜 그렇게 중요한지 크게 와닿지 않는다.
하지만 '동시성'을 기반으로 코드를 스케치 하게 되면 시간적으로 매우 효율적인 것은 잘 알 수 있게 되었다.

명언 || 궁금하거나 이해가 잘 가지 않는 내용ㅤ📘

🐘
작가가 없다면 이야기는 쓰이지 않을 것이다.
배우(actor)가 없다면 이야기는 생명을 얻지 못할 것이다.
엔지-마리 델산테(Angie-Marie Delsante)

#코딩 #개발자 #노마드북클럽 #노개북


우주류는 내 안에 살아 있소

profile
낯선이여, 당도하였으면 당도높은 복숭아

0개의 댓글