개발자 99% 커뮤니티에서 수다 떨어요!
동시성은 둘 이상의 코드 조각이 실행될 때 동시에 실행중인 것처럼 행동하는 것. 병렬성이란 실제로 동시에 실행되는 것.
시스템의 규모가 어느 정도를 넘어가면 동시성을 고려하지 않고 코드를 작성하기란 거의 불가능하다.
동시에 혹은 병렬로 작동하는 코드가 신기하던 시절도 있었다. 하지만 이제는 필수다.
2022.03.30
6장 동시성
시간에는 우리가 신경 써야 할 측면이 두 가지 있는데, 동시성(동시에 일어나는 일들)과 순서(시간의 흐름 속에서 일들의 상대적인 위치)다.
'이것을 하고, 그런 다음에 저것을 하고.' 하지만 이런 식으로 생각하다 보면 시간적 결합을 만들게 된다.
우리는 동시성을 확보해야 한다.
작업 흐름 분석으로 동시성을 개선하라.
동시성을 고려한 설계를 할 때 찾아야 하는 것, 데이터베이스 조회, 외부 서비스 접근 등 이럴 때 CPU가 손가락만 빨면서 기다리는 대신 좀 더 생산적인 일을 할 수 있는 기회이다.
세마포어는 단순히 한 번에 한 사람만이 가질 수 있는 무언가다.
액터는 자신만의 비공개 지역 상태를 가진 독립적인 가상 처리 장치다.
프로세스는 본래 더 일반적인 가상 처리기로, 보통 운영 체제가 동시성을 지원하기 위하여 구현한다.
공유 상태 없는 동시성을 위하여 액터를 사용하라.
나는 코드를 작성하면서 한 번도 동시성, 병렬성에 대해서 생각해 본 적이 없다. 하지만 데이터 베이스를 불러올 때, 외부 API에서 정보를 불러올 때 화면에 무언가를 그린 적은 있다. 이것도 과연 동시성에 해당되는 것일까? 궁금한 점은 서비스의 크기가 얼마나 커져야 만 동시성과 병렬성이 꼭 필요한 것으로 느껴질지였다. 확실히 앞으로 동시성과 병렬성을 생각하며 코드를 작성을 해야 할 거 같지만 아직 많이 와닿지 않는 문제이기 때문에 이번 장은 빠르게 읽고 넘어갔다. 사실 레스토랑에 비유를 하여 내용 이해를 쉽게 해 주었지만 아직은 나에게 어려운 주제이다.
이 책을 계속 읽으면서 내가 얼마나 부족한지 매일매일 느끼곤 한다. 역시 좋은 코더, 실용주의 프로그래머가 되기란 어려운 것 같다. 그래도 코드를 작성하고 내가 작성한 코드가 오류없이 원하는 동작을 하는 것을 볼 땐 너무 행복하다.