본문 바로가기

Malware Analysis/- Knowledge storage

Difference between Multiprocessing and Multithreading

(출처 :https://www.youtube.com/watch?v=NxR6IgP3bUc)

 

우선, 사전적으로 어떤 차이가 있는지 위키백과를 통해 알아보자.

 

Multiprocessing(다중 처리)

다중 처리는 컴퓨터 시스템 한 대에 둘 이상의 중앙 처리 장치(CPU)를 이용하여 병렬로 처리하는 것을 가리킨다. 또, 이 용어는 하나 이상의 프로세서를 지원하는 시스템의 능력, 또는 이들 사이의 태스크를 할당하는 능력을 가리키기도 한다. 다중 처리 시스템은 다중 처리가 적용된 시스템을 뜻한다. 다중 처리 시스템에서는 여러 개의 프로세서가 하나의 메모리를 공유하여 사용하는 시스템이며, 일반적으로 하나의 운영 체제가 모든 프로세서를 제어한다.

 

[특징]

- 프로세서를 여러 개 사용하여 여러 개의 작업을 동시에 수행함으로써 작업 속도를 높일 수 있다.

- 프로세서 중 일부에 문제가 발생하더라도 다른 프로세서를 이용해 처리할 수 있으므로 신뢰성이 높다.

 

요약해보자면, 멀티프로세싱은 말 그대로 하나의 프로세서가 아닌 하나 이상의 프로세서가 서로 협력하여 일을 처리하는 것을 가르킨다. 많은 작업을 빠른 시간에 처리하기 위해서는 하나의 프로세서가 아닌 여러 개의 프로세서가 하나의 작업을 병렬처리 하는 것이 효율적입니다.

벽돌 100개를 혼자 옮기려면 100번왔다갔다 해야겠지만 10명이라면 10번만 왔다갔다 하면되는 것 입니다.

 

 


 

Multithreading

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드라고 한다. 예를 들어 네이버에서 한명이 서비스를 이용하고 있다고 해서 다른 사용자가 네이버 서비스를 못 받는 것이 아니다. 즉, 네이버는 사용자 한명 한명에 스레드로 처리하고 있는 것이다.

 

[특징]

- 응답성 : 대화형 프로그램을 멀티스레드화하면, 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어, 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에 사용자와의 상호 작용이 가능 하다.

 

- 자원 공유 : 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 스레드를 가질 수 있다는 점이다.

 

- 경제성 : 프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥교환을 하는 편이 보다 경제적이다.

 

- 멀티프로세서 활용 : 멀티프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 스레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉, 다중 스레드화를 하면 다중 CPU에서 병렬성이 증가된다.

 


 

 

공통점

다 멀티태스킹을 성취하기위한 방법이다. 멀티 태스킹이랑 일정한 시간동안 여러가지 일을 한번에 하는 것이다. 컴퓨터로 예를들자면 파워포인트를 켜놓고 유투브를 켜놓고 카카오톡pc를 동시에 실행하고있다면 멀티태스킹이라고 볼 수 있다. 

 

차이점

1). 스레드는 가볍고 프로세스는 무겁다.

2). 멀티프로세싱은 하나의 프로세스가 에러나 메모리가 깨져도 다른 프로세스의 실행에 영향을 주지 않는다.

3). 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다.

'Malware Analysis > - Knowledge storage' 카테고리의 다른 글

size_t???  (0) 2018.06.21
win32 API  (0) 2018.03.10
Remote deburger  (0) 2018.03.04
해시(hash) vs 암호화(encryption)  (0) 2018.02.26
adc, sbb, carry flag, overflow flag 이해하기(+cmp)  (0) 2018.02.01