컴퓨터밑바닥 Chapter 2: 프로그램이 실행되었지만, 뭐가 뭔지 하나도 모르겠다.

2025. 6. 1. 23:28·Data Science/컴퓨터 밑바닥의 비밀
반응형

이번 장에서는 운영체제, 프로세스, 스레드의 개념을 기반으로 동기/비동기, 블로킹/논블로킹에 대해서 다룹니다. 기본적으로 컴퓨터가 일을 처리하는 방식에서의 추상화된 개념을 배울 수 있는 좋은 장이였습니다.


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인분 짤이 생각남

논블로킹 - 준동기식 리조또 100인분

5. 컨테이너와 가상 머신 기술

  • CPU가 능동적으로 일시중지하고 다음에 함수가 호출 될 때, 앞에서 중단된 지점에서 다시 실행이 가능할 때 함수를 코루틴
  • 함수의 일시 중지와 재개가 커널 상태에서 구현된는 경우를 스레드
  • 스레드에 주소 공간처럼 종속된 실행시 리소스를 결합한 것이 프로세스
  • 구성, 라이브러리처럼 프로그램이 의존하는 실행 환경과 함께 묶인 것을 컨테이너
  • 컨테이너는 운영 체재 계층 수준에서 소프트웨어 리소스를 가상화함, Docker로 인하여 빠르게 대중화된 기술
반응형

'Data Science > 컴퓨터 밑바닥의 비밀' 카테고리의 다른 글

컴퓨터 밑바닥 Chapter 3: 메모리라는 사물함에서부터 시작해보자  (0) 2025.06.06
컴퓨터밑바닥: Chapter 1 프로그램 언어부터 실행까지, 이렇게 진행된다.  (0) 2025.05.18
'Data Science/컴퓨터 밑바닥의 비밀' 카테고리의 다른 글
  • 컴퓨터 밑바닥 Chapter 3: 메모리라는 사물함에서부터 시작해보자
  • 컴퓨터밑바닥: Chapter 1 프로그램 언어부터 실행까지, 이렇게 진행된다.
지지플랏
지지플랏
DataScience 컨설팅을 업으로 하고있습니다.
  • 지지플랏
    지지플랏의 DataScience
    지지플랏
  • 전체
    오늘
    어제
    • 지지플랏
      • Data Science
        • SQL
        • Engineering
        • 데이터과학을 위한 통계
        • Khan Academy
        • 실무로 통하는 인과추론 with 파이썬
        • 데이터 중심 어플리케이션 설계(DDIA)
        • 컴퓨터 밑바닥의 비밀
        • 자동화
        • LLM
      • 담벼락
        • 인터뷰
        • 생각이 자란다
        • 컨텐츠 독후감
        • Career Development
        • ToastMasters
      • 기타- 비연재
        • 전공
  • 블로그 메뉴

    • Home
    • Admin
    • Write
  • 링크

    • Linkedin
    • Github
  • 공지사항

    • 지지플랏의 Data Science
  • 인기 글

  • 태그

    빅쿼리
    영화
    SQLD
    풀러스
    Toastmaster
    대중연설
    PGTM
    인과추론
    연설
    취업
    데이터
    데이터분석
    토스트마스터
    영어연설
    분석
    F분포
    공유경제
    평창
    a/btest
    제약
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
지지플랏
컴퓨터밑바닥 Chapter 2: 프로그램이 실행되었지만, 뭐가 뭔지 하나도 모르겠다.
상단으로

티스토리툴바