ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기술면접 준비2
    기술면접 준비 2023. 4. 14. 14:31

    동기(Synchronous) 와 비동기(Asynchronous) 코드 실행 방식

    동기(Synchronous)

    동기란 직렬적으로 태스크를 수행하는 방식이다. 요청을 받고 응답하기 전까지 다음 태스크가 동작하지 않는다.

    동기방식의 장점으로는 설계가 매우 간단하고 직관적이지만 단점으로는 결과가 주어질 때까지 대기해야하는 점이 있다.

    또한 요청과 결과가 한 자리에서 일어나야 하고 노드 사이의 작업 처리 단위를 동시에 맞추어야 할 때 동기방식이 필요하다.

     

    비동기(Asynchronous)

    비동기란 병렬적으로 태스크를 수행하는 방식이다. 요청을 받고 응답여부와 상관없이 다음 태스크가 동작한다.

    비동기방식의 장점으로는 결과가 주어지는데 시간이 걸리더라도 그 시간동안 여러작업을 수행할 수 있어 자원을 효율적으로 사용할 수 있지만 단점으로는 동기방식보다 복잡하다는 것이다.

    또한 요청한 결과가 그 자리에서 일어나지 않아도 되고, 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 될 때 비동기 방식이 필요하다.

     

    프로세스(Process) 와 스레드(Thread) 의 차이점

    프로세스(Process)

    운영체제로부터 자원을 할당받은 작업의 단위. 즉, 실행되고 있는 컴퓨터 프로그램인 것이다.

    하나의 프로세스는 하나의 실행중인 컴퓨터 프로그램이라고 생각하면 편할것이다.

    각각의 프로세스는 운영체제로부터 독립된 메모리 영역을 할당받는데, 이것을 사진으로 한번 살펴보겠다.

    위의 사진처럼 각각의 프로세스마다 Code/Data/Stack/Heap 의 독립된 메모리 영역을 할당받는 것이다.

    따라서 하나의 프로세스가 다른 프로세스에 변수나 자료에 접근할 수 없다.

    하지만 정말 다른 프로세스에 접근할 수 없냐 라고 물어본다면 그것은 아니다.

    프로세스간 정보를 공유하는 방법에는 IPC, LPC 같은 방법이 있는데 이 방식은 자원부담이 큰 단점이 있다.

     

    메모리 영역의 특징

    Code : 프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 저장 된 공간이다. (Read-Only)

    Data : 전역 변수 또는 static 변수 등 프로램이 사용하는 데이터를 저장하는 공간이다. (Read-Write)

    Stack : 함수 호출 시에 임시 데이터가 저장되는 공간으로써 함수내의 선언된 지역변수, 매개변수, 리턴값 등저장되는 공간이다. (LIFO 구조) Stack 영역은 컴파일 타임에 크기가 결정되므로 무한히 할당할 수 없고 재귀함수가 너무 깊게 호출되는 등의 이유로 stack 영역을 초과하면 stack overflow 가 발생한다.

    Heap : 프로그램 실행 중 동적으로 할당되는 메모리공간으로써 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

     

     

    과거에는 프로그램의 실행 시작부터 끝까지 하나의 프로세스를 사용하여 진행했다고 한다. 하지만 시간이 흐를수록 프로그램이 복잡해져 프로세스 하나만으로 프로그램을 실행하는것에 있어 문제가 생겼다. 그것에 있어 대처방안이 그럼 프로세스를 여러개를 사용하면 되지않나? 라는 생각을 할 수 있게 되는데 이것은 올바르지 않다. 왜냐하면 운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하는 것은 오류가 발생하기 때문이다. 이때 프로세스보다 더 작은 실행 단위 개념이 필요하게 되었고 이것이 바로 스레드 이다.

    스레드(Thread)

    프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다.

    스레드의 특징은 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.

    조금 더 자세하게 설명하자면, 위의 사진처럼 스레드는 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역만 따로 할당받고 나머지 메모리 영역은 공유한다. 따라서 하나의 프로세스 안에 여러개의 스레드가 존재 할 수 있고 이것을 멀티 스레드 라고 부른다.

     

    여기서 프로세스와 스레드의 중요한 차이점을 하나 더 알 수 있다.

    하나의 프로세스를 실행하다가 오류발생시 공유하고 있는 파일을 손상시키는 경우가 아니라면 다른 프로세스에 영향을 주지 않는다.

    하지만 스레드의 경우 Code/Data/Heap 의 메모리 영역을 공유하기 때문에 하나의 스레드에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료되게 되는 것이다.

     

    멀티 프로세스 와 멀티 스레드

    지금까지 프로세스와 스레드에 대해 정리해보았다

    마지막으로 멀티 프로세스 대신 멀티 스레드를 사용하는 이유에 대해 정리해보려고 한다.

    멀티 프로세스란 간단하게 하나의 프로그램 안에서 여러개의 프로세스가 동작하는 것을 의미하고

    멀티 스레드란 하나의 프로세스 안에 여러개의 스레드가 동작하는 것을 의미한다.

    멀티 프로세스의 장점이란?

    • 독립된 구조이기 때문에 안전성이 높다.
    • 여러 프로세스가 같이 작업하고 있기 때문에 하나의 프로세스가 죽는다 해도 문제가 확산되지 않는다.

    단점으로는

    • 멀티 스레드보다 많은 메모리 공간을 차지한다.
    • 독립된 메모리 영역이기 때문에 작업량이 많을 수록 Context Switching 이 자주 일어나 성능저하가 발생할 수 있다.

     

    멀티 스레드의 장점이란?

    Context-Switching 할때 공유하고 있는 메모리 만큼의 자원을 아낄 수 있다.

    프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어 응답시간이 빠르다.

    단점으로는 스레드 하나가 오류를 발생시킨다면 전체 프로세스가 영향을 받는다.

    따라서 필연적으로 동기화 에 대한 문제가 발생하고 프로그래머는 신중하게 코드를 짜야하고 적절한 기법으로 구현을 해야한다.

     

     

    참고자료

    https://private.tistory.com/24

     

    동기와 비동기의 개념과 차이

    데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 설명하는 게시물은 매우 많은데 프로그래밍적으로 생각했을 때 이해가 가지 않아서 쉽게 이해를 할 수 있는 동기와 비동기의 예가 어

    private.tistory.com

    https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

     

    프로세스와 스레드의 차이

    프로세스와 스레드의 차이는 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다.

    velog.io

     

    '기술면접 준비' 카테고리의 다른 글

    기술면접 준비5  (1) 2023.04.20
    기술면접 준비4  (0) 2023.04.20
    기술면접 준비3  (1) 2023.04.17
    기술면접 준비  (0) 2023.04.13
Designed by Tistory.