본문 바로가기

1:1 개발 공부

프로세스와 스레드, 프레임워크 VS 라이브러리, CPU VS GPU

다양한 언어를 온라인에서 해볼 수 있는 링크 : https://www.onlinegdb.com/

 

1) 프로세스와 스레드

윈도우가 사용하는 단위는 "프로세스"입니다.

(윈도우이냐, 리눅스이냐 에 따라 달라지기 때문에, 윈도우가 사용하는 단위가 프로세스라는 것을 알아두어야합니다)

 

프로세스는 CPU 안에 할당되어 운영되고 있는 현재 실행중인 프로그램을 의미합니다.

그래서 작업 관리자를 보면, 백그라운드 "프로세스" 라는 용어로 나타난다는 것을 알 수 있습니다. 보이지 않는 윈도우 내부에서 열심히 돌아가고 있는 프로그램들을 백그라운드 프로세스라고 한다면, 우리가 컴퓨터로 바라보고 있는 화면은 "포그라운드 프로세스"라고 합니다.


프로세스 안에는 다양한 스레드가 존재합니다.

스레드는 프르세스 내에서 실행되고 있는 실행 단위입니다. 실제 프로그램을 짤 때는 스레드가 중요합니다. 

프로세스 내에는 Main 스레드 1가지가 무조건 존재합니다. 스레드를 생성하지 않으면 메인 스레드 한 간지만 존재하겠죠?

그렇다면 스레드를 여러 개 생성한다면 어떻게 될까요? 스레드가 번갈아서 작동하게 됩니다. 예를 들어, 우리는 컴퓨터로 음악을 들으며, 워드 프로그램을 실행하고, 메신저 창도 띄워놓습니다. 실제로 우리는 '동시에' 하는 것처럼 느껴지지만, 컴퓨터 내부에서는 아주 빠른 속도로 스레드가 '번갈아' 진행 되고 있습니다. 이렇게 스레드가 번갈아가면서 진행되는 것을 멀티스레드 라고 합니다.

그리고 스레드의 실행 순서를 정하는 것은 스케줄링이라고 합니다. 다수의 스레딩을 사용하는 프로그래밍을 하는 경우, 스레드 간 작업 전환이 필요한데 이러한 작업 전환을 컨텍스트 스위칭이라고 합니다.

 

 


2) 라이브러리(Library) VS 프레임워크(Framework)

라이브러리란 개발자가 개발하는데 필요한 것들을 모아둔 도구들(코드, 변수, 함수, 클래스 등)을 호출하여 사용하는 방식이라고 보면 됩니다. 개발자가 필요한 부분을 가져다 사용할 수 있는 도구들이라고 보면 됩니다.

프레임워크란 소프트웨어, 어플리케이션의 개발을 수월하게 하기 위해 설계와 구현을 재사용 가능하도록 제공하는 환경을 마합니다. 어플리케이션 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동 기능을 위해 뼈대를 제공해주는 것입니다. 프레임워크는 전체적인 흐름을 자체적으로 갖고 있기 때문에 개발자가 그 흐름에 맞춰 공부를 하고 개발을 해야합니다. 

 

따라서, 라이브러리와 프레임워크의 가장 큰 차이는 "흐름(Flow)에 대한 제어 권한이 어디에 있느냐" 입니다. 라이브러리는 개발자가 필요한 부분을 가져와 상황에 맞추어 코드를 작성합니다. 반면, 프레임워크는 자체적인 흐름이 있기 때문에 그 안에서 필요한 코드를 개발자가 맞추어서 작성해야합니다. 이렇듯, 프레임워크는 개발자(사람)가 직접 프레임워크(기계)에 맞추어 코딩을 하게 되어, 제어의 역전(Inversion of Control)이 적용되었다고 말합니다.

 


3) CPU VS GPU

 CPU(Central Processing Unit) (약어는 필수로 알아두기 :) 

 - CPU란 중앙처리장치로 컴퓨터의 두뇌라고 보면 됩니다. 복잡하고, 기능도 많으며 각종 제어 처리를 위한 부분이 많습니다. 컴퓨터의 성능에 있어 가장 결정적인 것은 CPU 라고 보면 됩니다. CPU는 1) 연산,제어부  2)레지스터(메모리)로 구성됩니다. 1)연산, 제어부는 명령을 처리하고 2)레지스터(메모리)는 처리할 명령을 전달하는 역할을 합니다. 레지스터를 간략하게 설명하자면 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치라고 보면 됩니다. 

 

GPU(Graphics Processing Unit)

-GPU란 쉽게 말해 평소에 들어보셨을 '그래픽 카드'라고 생각하면 됩니다. 비디오, 즉 픽셀로 이루어진 영상을 처리하는 용도 생겼습니다. 하지만 요새는 CPU에 업무가 과중하다보니, CPU의 업무 중 일부를 GPU에게 할당시키는 용도로 많이 사용합니다. 특히, GPU은 반복적이고 비슷한 대량의 연산을 수행하며 이를 병렬적으로 작업하기 때문에 CPU에 비해 속도가 빠릅니다. GPU는 픽셀 하나하나에 대한 연산을 하기 때문에 연산능력이 비교적 떨어지는 CPU가 GPU로 데이터를 보내 빠르게 처리합니다.

 

정리하자면,

CPU는 GPU에 비해 코어가 적지만, 강력한 파워를 갖고 있습니다. 코어란, 각 장치의 핵심라고 생각하면 됩니다. CPU도 병렬처리는 되지만 입출력도 수행하고, 저장장치나 메모리와 통신하므로 순차적인 작업에 강점이 있습니다. 

GPU는 CPU에 비해 코어가 많습니다. 하지만, CPU의 코어들 보다는 성능이 낮습니다. 오로지 연산만 하기 때문에 코어 성능이 CPU만큼 좋지는 않아도 되기 때문입니다. 대신, CPU보다 훨씬 많은 수를 가지고 있어 동시에 작업하기 때문에 병렬 처리에 더 용이합니다.