이번 장에서는 운영체제, 프로세스, 스레드의 개념을 기반으로 동기/비동기, 블로킹/논블로킹에 대해서 다룹니다. 기본적으로 컴퓨터가 일을 처리하는 방식에서의 추상화된 개념을 배울 수 있는 좋은 장이였습니다.
1. 용어 정리
신규 개념 |
프로그램 카운터 |
레지스터 |
진입 포인트(Entry Point) |
구조체(structure) |
스레드(thread) |
스레드 풀(thread pool) |
동기/비동기 |
콜백지옥 |
블록/논블록 |
컨테이너 |
1. CPU가 하는일
- 1. 메모리에서 명령어 가져오기
- 2. 이 명령어를 실행하기
CPU는 프로그램 카운터(PC), 레지스터에 명령어 주소를 저장함. 소스 파일을 컴파일러가 실행파일로 변환시키고, 이를 디스크에 저장하며 실행 당시 메모리에 올리면 CPU가 이를 확인하여 실행시킴. 다중프로세스 프로그랭을 통해서 한 번에 여러 연산이 가능하게 하지만, 다음의 부담이 있음
- 프로세스를 생성할 때의 부담(overhead)
- 프로세스 간 통신으로 인한 복잡성 증가
따라서 스레드의 개념이 등장
2. 스레드 등장
프로세스는 메모리에서 실행할 적절한 영역을 찾을 후 CPU의 PC 레지스터를 main함수로 지정하는 흐름. 따라서 단 하나의 실행으름만 존재 스레드는 운영체제 계층에서 구현되며 동일한 프로세스에서 동시에 진행되는 개념. 이때 스레드는 긴 작업과 짧은 작업이 존재 할 수 있으며 매번 스레드를 열었다 닫았다하면 부하가 걸리므로 짧은 작업은 스레드 풀(thread pool)을 만들어 처리할 작업이 생기면 스레드에 요청하고 그 외에는 휴무. 이때 생성자와 소비자의 개념이 등장스레드는 전용 리소스와 공유 리소스를 구분해야 스레드 안전을 추구할 수 있게됨
3. 코루틴의 등장
붉은색 푸른색~ 그 사이 짧은 "코루틴"
이무진의 <신호등> 각색
코루틴은 Python 에서 yield로 구현되며, 함수 실행 중간 일시중지와 재개의 기능을 할 수 있게됨
# 일반
def func():
print("a")
print("b")
print("c")
def foo():
func()
# a
# b
# C
이때 yield함수를 통해서 일시정지와 재개의 개념을 넣을 수 있음. 코루틴은 자신이 일시 중지될 때 실행 중인 상태를 저장했다가 다시 시작 하여 계속 되는 구조를 만들 수 있음
# 코루틴
def func():
print("a")
yield
print("b")
yield
print("c")
def A():
co = func()
next(co)
print("in function A")
next(co)
# a
# in fucntion A
# b
함수는 코루틴의 특별한 예이며, 반대로 코루틴은 함수의 일반화
4. 콜백 함수
콜백 함수는 다른 코드에 매개변수로 전달되는 실행 가능한 코드. 다른 함수가 반환 될때 까지 기다리는 동기 콜백(블로킹 콜백)과 콜백 함수와 주 프로그램이 동시에 진행될 수 있는 비동기 콜백 이 있음. 하지만 비동기 콜백은 복잡한 서비스에서 수십 수백개의 콜백함수가 비동기 콜백으로 처리하여 콜백 지옥에 빠질 수 있는 단점이 있음.
5. 동기/비동기
- 동기: 작업이 순차적으로 진행되며, 한 작업이 완료될 때까지 기다려야함(Ex 전화통화)
- 비동기: 작업이 독립적으로 실행되며, 다른 작업을 동시에 수행 가능(Ex 이메일 통신)
- 블로킹: 실행 중인 스레드나 프로세스가 작업 완료될 때 까지 일시 중지됨, 필시적으로 동기작업은 블로킹
- 논블로킹: 실행중인 스레드나 프로세스가 중지되지 않고 계속적으로 실행
하지만 논블로킹이 반드시 비동기를 의미하는 것은 아님. 피자를 주문해놓고 매번 호출자가 피자 완료를 확인한다면 비동기이긴 하지만 논블로킹하지 않음. 갑자기 흑백요리사의 리조또 100인분 짤이 생각남
5. 컨테이너와 가상 머신 기술
- CPU가 능동적으로 일시중지하고 다음에 함수가 호출 될 때, 앞에서 중단된 지점에서 다시 실행이 가능할 때 함수를 코루틴
- 함수의 일시 중지와 재개가 커널 상태에서 구현된는 경우를 스레드
- 스레드에 주소 공간처럼 종속된 실행시 리소스를 결합한 것이 프로세스
- 구성, 라이브러리처럼 프로그램이 의존하는 실행 환경과 함께 묶인 것을 컨테이너
- 컨테이너는 운영 체재 계층 수준에서 소프트웨어 리소스를 가상화함, Docker로 인하여 빠르게 대중화된 기술
'Data Science > 컴퓨터 밑바닥의 비밀' 카테고리의 다른 글
컴퓨터 밑바닥 Chapter 3: 메모리라는 사물함에서부터 시작해보자 (0) | 2025.06.06 |
---|---|
컴퓨터밑바닥: Chapter 1 프로그램 언어부터 실행까지, 이렇게 진행된다. (0) | 2025.05.18 |