프로세스와 스레드/동기와 비동기

·2023년 4월 14일
0

study

목록 보기
55/81
post-thumbnail

프로세스와 스레드

프로그램 -> 프로세스 -> 스레드
프로세스는 메모리 상에서 실행중인 프로그램을 의미하고, 스레드는 그 프로세스 내에서 실행되는 흐름 단위이다.

  • 프로세스와 스레드의 가장 큰 차이점은 프로세스는 자원을 공유하지 않지만(자신만의 고유 공간과 자원을 할당받아 사용) 스레드는 자원을 공유(code,data,heap/stack만 따로 할당)한다는 점이다.

  • 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 더 적다.

  • 그러나 한 스레드에서 발생한 오류가 동일한 프로세스 내의 다른 스레드에 영향을 줄 수 있지만, 프로세스는 다른 프로세스에 영향을 주지 않는다.

  • 또한, 프로세스간 통신(IPC)보다 스레드 간의 통신의 비용이 적어 작업들 간의 통신의 부담이 적고, 전환 속도가 빠르다.

  • 프로세스 생성 및 종료는 스레드보다 더 많은 시간과 자원을 소비한다.

    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들기 때문.

Context Switching

CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다.
구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

  • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러와야 한다.
    -> Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.

  • 스레드 사이의 작업량이 작아 Context Switching이 빠르다

프로세스와 스레드의 차이

동기와 비동기

  • 동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
    즉, 한 개의 데이터 요청에 대한 서버의 응답이 이루어질 때까지 계속 대기해야 함.
    -> 작업이 순차적으로 실행됨.

  • 동기는 설계가 매우 간단하고 직관적이라는 장점이 있지만, 시간이 오래 걸리는 작업이 있는 경우 블로킹(Blocking)이 발생한다는 단점이 있다.

  • 비동기는 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도되며, 다른 외부 활동을 수행하여도 되고 서버에게 다른 요청사항을 보내도 상관없음.
    -> 작업이 동시에 실행되거나 중간에 다른 작업을 처리할 수 있음.

  • 비동기는 결과가 주어지는데 시간이 오래 걸리더라도 다른 작업을 할 수 있어 자원을 효율적으로 사용가능 하다는 장점이 있고, 설계가 동기보다 복잡하다는 단점이 있다.

블로킹 vs 논블로킹

블로킹 : A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다. B에게 제어권 <-> 동기
논블로킹 : B가 영향을 미치지 않음, A에게 제어권 <-> 비동기

논블로킹 이점때문에 자바스크립트 같은 싱글스레드 환경에서 실행되는 언어에서 비동기 함수가 많이 사용됨.

제어권

제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.

profile
개발자 꿈나무

0개의 댓글