프로세스와 스레드

jodbsgh·2023년 9월 20일
0

2023

목록 보기
1/8

프로세스와 스레드는 컴퓨터 프로그램이 실행될 때 발생하는 두 가지 중요한 개념이다.
이 두가지 개념은 다중작업(Multitasking)환경에서 프로그램들이 동시에 실행될 수 있도록 도와주는 역할을 한다.

1. 프로세스(Process)

프로세스의 특징

  • 독립성: 각각의 프로세스는 다른 프로세스와 완전히 독립되어있다. 하나의 프로세스는 다른 프로세스에게 영향을 미치지않고 실행됩니다. 프로세스는 서로 완전히 격리되어 있으며, 한 프로세스가 다른 프로세스의 자원에 직접 접근하려면 운영체제를 통해 허가받아야 합니다. 각각의 프로세스는 자신만의 주소 공간을 가지며, 이로 인해 다른 프로레스에 영향을 미치지 않고 독립적으로 실행됩니다.

  • 자원 할당: 운영체제는 각 프로세스에게 메모리 공간, CPU 시간, 파일 디스크립터 등의 자원을 할당합니다. 이러한 자원은 해당 프로세스만 사용할 수 있으며 다른 프로세스와 공유되지 않습니다.

  • 컨텍스트 스위칭: 여러 프로세스가 동시에 실행될 수 있으므로, 운영체제는 프로세스 간 전환을 수행하는데 이를 컨텍스트 스위칭이라고 한다. 컨텍스트 스위칭은 현재 실행 중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태를 복원하는 작업을 의미합니다.

  • 통신: 프로세스 간 통신(IPC, Inter-Process Communication)을 통해 서로 다른 프로세스간에 정보를 주고 받을 수 있습니다. 이를 통해 프로세스 간 협력이 가능합니다.

프로세스의 상태

  • 실행 상태(Running): CPU에서 현재 실행중인 상태입니다.

  • 준비 상태(Ready): 실행을 기다리는 상태로, CPU가 사용 가능한 경우 실행 상태로 전환됩니다.

  • 대기 상태(Blocked): 프로세스가 어떤 이벤트(예: 입출력 완료)를 기다리는 상태입니다. 이벤트가 발생하면 준비 상태로 전환됩니다.

프로세스 생성과 종료

  • 프로세스 생성: 새로운 프로세스를 생성하려면 보통 부모 프로세스가 자식 프로세스를 fork 또는 spawn하는 방법을 사용합니다. 자식 프로세스는 부모 프로세스의 복제본으로 시작하며, 이후에 필요한 작업을 수행합니다.

  • 프로세스 종료: 프로세스가 중요한 개념으로 사용되며

프로세스의 생성과 종료

  • 프로세스 생성: 새로운 프로세스를 생성하려면 보통 부모 프로세스가 자식 프로세스를 fork또는 spawn하는 방법을 사용합니다. 자식 프로세스는 부모 프로세스의 복제본으로 시작하며, 이후에 필요한 작업을 수행합니다.

✔ spawn : 프로세스나 스레드를 생성하는 동작을 일컫는 용어, 또는 비동기 프로그래밍에서 비동기 작업을 시작하고, 결과를 기다리지 않고 다른 작업을 수행을 의미하는 개발 전반적으로 사용되는 프로그래밍 용어이다.

2. 스레드(Thread)

  • 스레드는 하나의 프로세스 내에서 실행되는 작은 실행 단위입니다. 즉, 스레드는 하나의 프로세스 내에서 여러 개 생성될 수 있으며, 이들은 동일한 프로세스 주소 공간을 공유합니다.
  • 스레드는 프로세스 자원을 공유하며, 스레드 간의 통신이 비교적 간단하고 빠릅니다.
  • 여러 스레드를 사용하면 동시성을 활용하여 작업을 병렬로 처리할 수 있으므로 멀티코어 CPU에서 성능 향상을 이끌어내는 데 유용합니다.

스레드의 특징

  • 경량성: 스레드는 프로세스 내에서 생성되므로 프로세스에 비해 경량입니다. 스레드 간의 전환과 통신이 빠르며, 메모리를 적게 사용합니다.

  • 공유자원: 스레드는 하나의 프로세스 내에서 실행되기 때문에 프로세스의 자원(메모리, 파일, 네트워크 연결 등)을 공유합니다. 이로 인해 데이터 공유가 용이하며, 동시 접근 문제에 주의해야 합니다.

  • 병렬 처리: 멀티코어 CPU를 활용하여 여러 스레드가 병렬로 실행될 수 있어, 다수의 작업을 동시에 처리할 수 있습니다.

스레드의 사용

  • 멀티태스킹: 다수의 작업을 동시에 실행하고자 할 때 스레드를 사용합니다. 예를 들어, 웹 서버에서 여러 클라이언트 요청을 동시에 처리하는 데 스레드가 사용됩니다.

  • 동시성 제어: 공유 자원에 대한 동시 접근을 관리하고 제어하기 위해 스레드를 사용합니다. 스레드 간 동기화 메커니즘을 통해 경쟁 조건과 데드락을 방지할 수 있습니다.

  • 비동기 프로그래밍: 스레드를 사용하여 비동기 작업을 처리하고, 메인 스레드는 다른 작업을 계속할 수 있습니다.

스레드의 구현

  • 스레드는 여러 프로그래밍 언어와 라이브러리에서 지원됩니다. 예를 들어, Java에서는 'Thread' 클래스를 사용하여 스레드를 생성하고 관리할 수 있습니다.

  • 또한 운영체제에 따라 스레드 관리 방식이 다를 수 있으며, 몇 가지 운영체제에서는 스레드 관리를 하나의 프로세스에게 위임하기도 합니다.

스레드는 병렬 처리와 동시성을 구현하기 위한 강력한 도구로, 다수의 작업을 빠르게 처리하고 자원을 효율적으로 활용하는 데 중요한 역할을 합니다. 그러나 스레드를 사용할 때에는 동시성 문제(경쟁조건, 데드락등)와 관련된 주의사항을 숙지하고 안정적인 코드를 작성해야 합니다.

<요약>

프로세스

1.프로세스는 독립된 프로그램 실행 단위이다.
2. 각각이 자체 메모리와 자원을 가지고 있다.

스레드

  1. 하나의 프로세스 내에서 실행되는 작은 실행 단위다.
  2. 같은 프로세스 내에서 메모리와 자원을 공유한다.
  3. 스레드를 사용하면 프로세스 간 통신과 비교적 가볍게 병렬작업을 수행할 수 있다.
  4. 따라서 효율적인 멀티태스킹 및 멀티코어 CPU 활용이 가능하다.
profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글