[스터디] 스레드와 프로세스 간 통신

Jun_k·2026년 7월 3일

CS

목록 보기
16/19

스레드는 왜 레지스터와 스택만 독립적으로 사용할까?

레지스터를 독립적으로 쓰는 이유 -> "나 지금 어디 실행하고 있어"

  • 현재 실행 중인 CPU 명령어 주소를 가리키는 PC(프로그램 카운터)
    레지스터가 존재한다.

  • 따로 쓰는 이유는 스레드 여러 개가 번갈아 가며 실행될 때,
    "내가 아까 코드 몇 번째 줄까지 실행했는지"를 각자 기억하고 있어야 한다.
    각자 기억하지 않고, 공유해 버리면 다른 스레드가 내 기록을 지워버려
    내 차례가 왔을 때 어디서부터 시작해야 할지 모르는
    머릿속이 새하얘지는 상태가 되는 것이다.

스택 -> "나 지금 어떤 함수 실행 중이야?"

  • 함수가 호출될 때 필요한 지역 변수
    함수가 끝난 후 돌아갈 리턴 주소를 쌓아두는 공간이다.

  • 따로 쓰는 이유는 스레드 A가 수행하는 함수 호출 순서와
    스레드 B가 수행하는 함수 호출 순서는 완전히 다르다.

    하나의 스택을 같이 쓰면 함수 호출 내역과 지역 변수가 한곳에 뒤섞여
    완전히 엉망이 되고, 함수가 끝났을 때 어디로 돌아가야 할지 찾을 수가 없게 된다.

결론

  • 코드, 데이터, 힙은 공유 -> 자원을 효율적으로 쓰기 위해 공통 자원은 같이 쓴다.

  • 레지스터, 스택은 독립적으로 -> "내가 지금 어디 코드를 실행하고 있고,
    어떤 함수를 거쳐왔는지"라는 독립적인 실행 흐름을 위해 이 두개는 따로 쓴다.


병렬처리 4가지 방법


동일한 컴퓨터 내부에서 파이프 통신이 소켓 통신보다 어떤 부분이 효율적일까?

  • 파이프는 동작 원리가 운영체제(커널) 메모리에 고정된 크기의
    공유 버퍼를 하나 만들어서 그 안에서 데이터를 주고받는다.

  • 장점은 데이터 포장이나 복잡한 연결 절차(Handshake)없이
    메모리 복사 한 번으로 데이터가 바로 이동한다.
    통신을 위해 관리해야 하는 부분이
    가볍고 단순하기에 CPU 연산량과 메모리를 거의 쓰지 않는다.

  • 소켓은 외부 네트워크 컴퓨터와의 통신을 전제로 설계되어서
    포트를 열고 TCP/IP 프로토콜 스택을 거쳐 데이터를 패킷 단위로 주고 받는다.

  • 동일 컴퓨터 내에서 발생하는 비효율은
    일단 불필요하게 포장을 해야한다.
    같은 컴퓨터 안에서 루프백(127.0.0.1)으로 통신하더라도
    데이터는 네트워크 패킷 형태로 포장, 재조립 되는 프로토콜 단계를 무조건 거친다.
    이 과정에서 내부 메모리 복사가 여러 번 발생한다.

    통신 전 3-Way Handshake 같은 논리적인 연결 과정을 거쳐야 하고, 로컬 안에서는
    발생할 리 없는 패킷 분실이나 순서 뒤바뀜을 막기 위한
    흐름 제어를 계속 유지해야 하니 자원 낭비가 심하다.

  • 결론은 외부 네트워크 연결 가능성이 전혀 없는 동일 컴퓨터 내 통신이면
    불필요한 연산과 절차가 생략된 파이프 방식이 소켓보다 훨씬 효율적이다.


파일 포인터에 대한 설명 정리

  • 파일 포인터는 3단계로 설명할 수 있다.
  1. 파일 열기 (초기화)

    • 파일을 처음 열면, 손가락(파일 포인터)은 파일의 맨 첫 부분(0바이트 위치)을 가리킨다.

    • 예외: 만약 기존 파일의 맨 뒤에 내용을 덧붙이는 이어쓰기(Append) 모드로 열면
      손가락은 자동으로 파일의 맨 끝(EOF, End of File)을 가리킨다.

  2. 읽기/쓰기 작업 (자동 이동)

    • 파일 포인터의 가장 큰 특징은 "작업한 만큼 알아서 앞으로 전진한다"는 점이다.

    • 만약 현재 위치에서 10바이트만큼 데이터를 읽거나 쓰면, 포인터도 자동으로
      10바이트 뒤로 이동하여 다음 작업 위치에서 대기한다.

  3. 위치 강제 이동 (임의 접근)

    • 순서대로만 읽지 않고, 원하는 위치로 포인터를 강제로 이동시킬 수 있다.
      프로그래밍에서는 주로 fseek() 같은 함수를 사용해서
      "처음부터 50바이트 떨어진 곳으로 이동하라"고 명령한다.

profile
개발을 즐겨보자.

0개의 댓글