프로세스와 스레드

박찬영·2023년 9월 25일
0

프로세스와 스레드


프로세스

프로세스는 컴퓨터에서 실행 중인 프로그램을 나타냅니다.
이것은 프로그램이 메모리에 로드되고 실행되는 독립적인 작업 단위입니다.

🧏‍♂️ : " 생각해보세요. 여러분의 컴퓨터에서 웹 브라우저를 실행하는 것은 하나의 프로세스입니다.
또한 동시에 워드 프로세서를 열면 또 다른 프로세스가 생성됩니다. "

이때 프로그램과 프로세스의 차이점을 모르는 사람을 위해 추가적인 설명을 하겠습니다.

프로그램프로세스
어떤 작업을 하기 위해 실행할 수 있는 파일실행되어 작업중인 컴퓨터 프로그램
파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
코드 덩어리코드 덩어리를 실행한 것

스레드

스레드는 프로세스 내에서 실행되는 작은 실행 단위로, 하나의 프로세스 내에서 여러 개의 스레드가 동작할 수 있습니다.

🧏‍♂️ : " 웹 브라우저 프로세스에서 여러 탭을 열 때, 각 탭은 별도의 스레드로 실행됩니다.
예를 들어, 하나의 스레드는 홈페이지를 로드하고, 다른 스레드는 동영상을 재생할 수 있습니다.

스레드의 등장

과거에는 프로그램을 실행할 때 프로세스 하나만을 사용해서 이용했었습니다.
하지만 기술이 발전됨에 따라 프로그램이 복잡해지고 다채로워짐으로써 프로세스 작업 하나만을 사용해서 프로그램을 실행하기에는 한계가 있었습니다.

오늘날 컴퓨터는 파일을 다운 받으며 다른 일을 하는 멀티 작업은 너무 당연한 기능이라고 생각할지 모르겠지만, 과거에는 파일을 다운받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용하기 때문에 다운이 완료될때까지 하루종일 기다려야 했습니다.
그렇다고 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하고 CPU에서 할당받는 자원이 중복되게 될 것입니다.
스레드(Thread)는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생 하였습니다.

크롬 브라우저가 실행 되면 프로세스 하나가 생성될 것입니다.
그런데 우리는 브라우저에서 파일을 다운 받으며 온라인 쇼핑을 하면서 게임을 하기도 합니다.

즉, 하나의 프로세스 안에서 여러가지 작업들(파일 다운로드, 온라인 쇼핑) 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티(다중) 스레드 라고 부릅니다.


프로세스와 스레드의 차이점

독립성

프로세스는 다른 프로세스와 독립적으로 실행됩니다.
한 프로세스가 충돌하더라도 다른 프로세스는 영향을 받지 않습니다.

스레드는 하나의 프로세스 내에서 다른 스레드와 공유 메모리 공간을 가지며, 서로 영향을 미칠 수 있습니다.

자원 사용

프로세스는 독립된 메모리 공간을 사용하므로, 여러 프로세스는 서로의 메모리에 직접 접근할 수 없습니다.
스레드는 같은 프로세스 내에서 동작하며, 공유 메모리를 사용하여 데이터를 주고받을 수 있습니다.

생성 및 종료 오버헤드

프로세스를 생성하거나 종료하는 것은 비용이 높습니다.
스레드는 프로세스 내에서 생성 및 종료하기가 비교적 빠릅니다.


프로세스와 스레드의 장단점

프로세스의 장점

  1. 안정성 : 프로세스는 서로 독립적이므로 하나의 프로세스가 충돌하더라도 다른 프로세스에 영향을 미치지 않습니다.

  2. 격리 : 프로세스 간 메모리와 자원이 완전히 격리되므로, 하나의 프로세스에서 잘못된 조작이 시스템 전체에 영향을 미치지 않습니다.

스레드의 장점

  1. 효율성 : 스레드는 프로세스 내에서 메모리와 자원을 공유하므로, 프로세스 간 통신 비용이 낮고 작업 분배가 효율적입니다.

  2. 빠른 생성 및 종료 : 스레드를 생성하거나 종료하는 비용이 프로세스보다 낮습니다.

프로세스의 단점

  1. 자원 소모 : 각 프로세스는 운영체제로부터 독립적인 메모리 공간과 자원을 할당받습니다.
    이로 인해 프로세스 간에 메모리 및 자원 소모가 크며, 더 많은 메모리와 자원을 필요로 합니다.
    프로세스 간 전환에도 시간과 비용이 소요됩니다.

  2. 성능 저하 : 다수의 프로세스를 생성하고 관리하는 것은 시스템 성능에 부담을 줄 수 있습니다.
    프로세스 간 통신도 추가적인 오버헤드를 유발할 수 있습니다.

  3. 통신 오버헤드 : 서로 다른 프로세스 간의 통신은 별도의 IPC(Inter-Process Communication) 메커니즘을 필요로 하며, 이는 추가적인 오버헤드를 초래할 수 있습니다.

  4. 생성 및 종료 오버헤드 : 프로세스를 생성하거나 종료하는 데 비용이 높습니다.
    이로 인해 프로세스 기반의 다중 작업을 구현하기가 어려울 수 있습니다.

스레드의 단점

  1. 동기화 복잡성 : 여러 스레드가 공유 메모리에 접근할 때, 데이터 일관성을 유지하기 위해 동기화 메커니즘이 필요합니다.
    이를 구현하는 것은 복잡할 수 있고, 잘못 구현하면 데드락과 같은 문제가 발생할 수 있습니다.

  2. 안정성 문제 : 하나의 스레드가 잘못된 메모리 위치에 접근하면 다른 스레드에도 영향을 미칠 수 있으며, 이로 인해 예기치 않은 동작이 발생할 수 있습니다.

  3. 병렬화 한계 : 멀티코어 CPU에서는 여러 스레드가 병렬로 실행될 수 있지만, 프로세스보다는 제한적인 병렬화가 가능합니다.

  4. 성능 저하 : 스레드 간의 경쟁 상태(Race Condition)와 락 경합(Lock Contention) 등으로 인해 성능 저하가 발생할 수 있습니다.


경쟁 상태
경쟁 상태는 두 개 이상의 스레드가 공유된 자원(변수, 메모리 위치, 파일 등)에 동시에 접근하고 수정하려고 할 때 발생합니다.
스레드 간의 실행 순서나 타이밍에 따라 예상치 못한 결과가 발생할 수 있으며, 이로 인해 프로그램의 동작이 예측할 수 없게 됩니다.

락, 락 경합
락은 여러 스레드가 동시에 공유 데이터에 접근하는 것을 방지하고 데이터 일관성을 유지하기 위해 사용됩니다.
상호 배제 락
상호 배제 락은 오직 하나의 스레드만 락을 소유하고 공유 데이터에 접근할 수 있도록 합니다.
다른 스레드가 락을 획득하려고 시도하면 대기 상태에 들어가며, 락을 소유한 스레드가 락을 해제할 때까지 대기합니다.
상호 배제 락은 주로 공유 데이터에 대한 안전한 동시 접근을 보장하기 위해 사용됩니다.
세마포어
세마포어는 락을 획득할 수 있는 스레드의 개수를 제한하는 카운터 형태의 락입니다.
세마포어는 특정한 개수만큼 스레드가 락을 획득하도록 허용하며, 락을 사용한 후 세마포어 카운터를 감소시킵니다.
락 경합
락 경합은 여러 스레드가 동일한 락(뮤텍스 또는 세마포어와 같은 동기화 메커니즘)을 얻으려고 경쟁할 때 발생합니다.
한 스레드가 락을 획득하면 다른 스레드는 락을 얻을 때까지 대기해야 합니다. 이 대기로 인해 성능 저하가 발생할 수 있습니다

결론

프로세스 (Process)

  1. 프로세스는 컴퓨터에서 실행 중인 프로그램의 인스턴스 또는 독립적인 실행 단위입니다.
  2. 각 프로세스는 운영체제로부터 자신만의 메모리 공간과 자원(파일, CPU 시간 등)을 할당받습니다.
  3. 프로세스는 서로 독립적이며, 다른 프로세스와 직접적으로 통신하지 않는다.
  4. 프로세스 간 통신을 위해 IPC(Inter-Process Communication) 메커니즘이 사용됩니다.

스레드 (Thread):

  1. 스레드는 하나의 프로세스 내에서 실행되는 작은 실행 단위입니다.
  2. 프로세스 내의 스레드는 같은 메모리 공간을 공유하며, 이로 인해 데이터 공유와 효율적인 작업 분배가 가능합니다.
  3. 스레드 간 통신은 메모리 공유를 통해 이루어집니다.
  4. 멀티스레딩은 동시에 여러 작업을 처리할 때 유용하며, CPU 자원을 효율적으로 활용할 수 있습니다.

면접에서 이러한 설명을 보완하기 위해 추가로 스레드와 프로세스의 장단점, 언제 어떤 상황에서 사용해야 하는지, 스레드 간 동기화와 데드락에 대한 이해 등을 논의하면 좋습니다. 또한, 언어 또는 플랫폼에 따라 다르게 동작할 수 있는 경우도 감안하여 설명하면 도움이 됩니다.

profile
오류는 도전, 코드는 예술

0개의 댓글