"병렬성"과 "동시성"은 컴퓨터 과학에서 작업을 효율적으로 수행하기 위한  두 가지 개념.

이름만 보면 비슷한 의미로 보여 혼동하기 쉽지만, 서로 다른 문제를 해결하는 기술이다.

이상적인 상황이지만,작업 단위별로 수행 완료까지 1초가 걸리고, 하나의 작업 단위 수행완료할 때까지 다른 작업 단위로 넘어가는 경우는 없다고 가정


병렬성 (Parallelism)

  • 여러 작업을 동시에 실행하는 것 -> 전체 처리 시간 단축을 목표
    • '멀티코어 프로세서'나 '분산 시스템'을 활용해 작업을 나누고,
      각 코어에서 독립적으로 실행함으로써 전체 처리 시간을 단축.
  • 마치 여러 요리사가 각자 다른 요리를 동시에 하는 것

특징

  • 여러 작업이 물리적으로 동시에 실행
  • 하드웨어의 멀티코어 or 멀티프로세서 환경에서만 가능
  • 작업 간 독립성이 높으며, 서로 영향을 주지 않는 경우가 많다.

예시

  • 비디오 렌더링
    • 큰 비디오 파일을 여러 조각으로 나누고
      각 조각을 여러 코어에서 동시에 처리
  • 행렬 연산
    • 수학적 연산을 여러 코어에서 병렬로 처리

동시성 (Concurrency)

  • 여러 작입이 번갈아가며 실행되는 것  -> 작업간 상호작용효율적인 스케줄링을 목표
    • 단일 코어에서도 여러 작업을 작업 단위(스레드 or 프로세스)로 나누어,
      작업들이 논리적으로 동시에 실행되는 것처럼 보이게 함.
  • 마치 한 요리사가 여러 요리를 번갈아가며 준비

특징

  • 작업이 동시에 실행되는 것처럼 보이지만,
    실제로는 작업 간 전환이 빠르게 이루어지는 것.
  • 단일 코어 환경에서도 동시성이 가능하다. -> 다중 코어에서도 각 코어별로 가능
    • 스레드 or 이벤트 루프를 활용한다.
  • 작업 간 상호작용(공유 자원, 락 등)이 빈번하게 발생할 수 있다.

예시

  1. 웹 서버
    • 하나의 서버가 여러 클라이언트의 각 요청이 처리되다가도 다른 요청으로 전환
  2. GUI 애플리케이션
    • 사용자의 입력 이벤트와 백그라운드 작업을 번갈아 처리

특징 병렬성 (Parallelism) 동시성 (Concurrency)
실행 방식 물리적으로 동시에
(여러 작업이 동시에)
논리적으로 동시에
(여러 작업이 번갈아 가며)
필요한 자원 멀티코어 or 멀티프로세서 환경 단일 코어(멀티스레드)
또는 멀티코어, 멀티 프로세서 환경
목적 전체 처리 시간 단축 작업 간 상호작용 및 효율적인 스케줄링
작업 간 독립성  독립성 높음
* 작업간 간섭 주지 않는 경우 많음
독립성 낮음
* 작업간 상호작용이 빈번 -> 데드락 위험
예시 비디오 렌더링, 행렬 연산 웹 서버 요청 처리, GUI이벤트 처리

병렬성동시성을 함께 사용하는 경우

현대 컴퓨팅에서는 혼용해서 사용하는 경우가 많음
  1. 웹 서버
    • 병렬성 : 각 작업이 멀티코어 환경에서 물리적으로 동시에 실행
    • 동시성 : 서버가 여러 클라이언트 요청을 스레드 단위로 번갈아가며 처리
  2. 대규모 데이터 처리
    • 병렬성 : 멀티코어 환경에서 각 작업이 병렬로 실행
    • 동시성 : 대규모 작업을 여러 스레드가 나누어 관리
반응형

'Computer Science > OperatingSystem' 카테고리의 다른 글

[운영체제] 컨테이너 (Container)  (0) 2024.11.25

 

애플리케이션과 해당 애플리케이션이 실행되는데 필요한 모든 것을 격리된 환경에서 패키징하고 실행하는 기술.

운영체제 수준에서의 가상화를 기반으로하며 애플리케이션이 다른 애플리케이션과 독립적으로 실행될 수 있도록 함.

컨테이너 란?

  • 애플리케이션과 의존성을 패키징한 경량화된 실행 환경
    • 실행에 필요한 코드, 라이브러리, 설정 파일 등
    • 호스트 운영체제 위에서 애플리케이션이 독립적으로 실행될 수 있도록 격리
  • 운영체제 수준에서의 가상화
    • 하드웨어 수준에서의 가상화를 사용하는 Virtual Machine (이하 VM)과 달리,
      컨테이너는 하나의 운영체제 커널을 공유하면서 프로세스 단위로 격리
     

* 용어

더보기

Hypervisor : 여러 운영 체제를 동시에 실행하기 위한 소프트웨어 계층

Bins : 운영체제의 기본 명령어 실행 파일을 저장하는 곳, 사용자와 관리자가 사용하는 핵심 명령어들이 포함.Lib : 애플리케이션과 운영체제가 실행되는 데 필요한 공유 라이브러리 파

주요 특징

  1. 경량화
    • 운영체제 전체를 가상화하지 않고, Host 운영체제의 커널을 공유하므로 가볍고 빠르다.
      • 가상화 환경마다 운영체제를 따로 관리하지 않는다.
    • VM보다 자원 소모가 적음
  2. 독립성
    • 컨테이너 내부의 애플리케이션은 Host 시스템 및 다른 컨테이너와 독립적으로 동작함.
    • 서로 다른 애플리케이션은 충돌하지 않음.
  3. 이식성
    • 컨테이너 이미지를 사용하면 동일한 환경을 어디서나 실행 가능.
    • 개발 환경과 운영 환경 간의 차이를 최소화
  4. 빠른 실행 및 배포
    1. 컨테이너는 프로세스 단위로 실행되므로 시작 속도가 빠르다.
    2. 새로운 버전의 애플리케이션을 손쉽게 배포 가능

 


컨테이너 vs 가상 머신 (VM)

특징 컨테이너 가상 머신(VM)
가상화 수준
(가상화가 일어나는 상위 레이어)
운영체제 수준 하드웨어 수준
운영체제 커널 호스트 OS 커널 공유 각 VM마다 별도 OS 커널 사용
리소스 소모 가볍고 빠름 상대적으로 무겁고 느림
시작 속도
(부팅 속도)
몇 초 이내 몇 분 소요
이식성 컨테이너 이미지를 어디서나 실행 가능 VM 이미지는 이식성 낮음
유스케이스 마이크로서비스, CI/CD, 클라우드 환경 독립된 운영체제 환경 필요시

* 시작 속도에 대한 개인적 의문

더보기

VM도 .iso 이미지 파일을 활용해 환경 세팅하고, 개인적으로 VM 부팅했을 때 긴 시간이 소요되지 않았던거 같은데? Docker 사용했을 때도 별로 시간 차이가 크지 않았던거 같은데?

 

컨테이너

* 컨테이너는 프로세스 단위로 동작

* 이미 실행 중인 호스트 운영체제 커널 위에서 바로 시작하므로, 수 초 이내 실행 가능

* ex) Docker 컨테이너는 일반적으로 1~2초 안에 실행

가상 머신

* VM은 가상화된 하드웨어 위에 독립된 운영체제를 부팅해야 함.

* 운영체제 부팅 과정에는 커널 초기화, 시스템 서비스 시작 등이 포함되므로, 일반적으로 수 분이 소요됨.

 

-> 프로세스 단위와 운영체제 통째로 로딩하는 것의 차이로 시간차이 발생 Ok.

 

새로 알게 된 것.

* Docker 컨테이너 내부의 애플리케이션 초기화 시간(JVM 초기화 시간) 등 영향이 있을 수 있다.

* VM의 최적화 상태

* Docker 이미지 크기

* 애플리케이션에 대한 초기화 의존성 문제

반응형

'Computer Science > OperatingSystem' 카테고리의 다른 글

[운영체제] 병렬성 vs 동시성  (2) 2024.11.27

+ Recent posts