1. Thread 와 Process
프로세스(Process)는 실행중인 프로그램이다.
예를 들어, 사용자가 메모장이라는 애플리케이션을 실행했을 때 운영 체제는 Disk에 있던 프로그램을 Memory로 가져오는데 이게 프로세스가 된다.
스레드(Thread)는 프로세스 내에서 실행되는 흐름의 단위이다.
예를 들어, 브라우저를 프로세스라고 본다면 해당 브라우저의 많은 탭들을 스레드로 볼 수 있으며 하나의 프로세스 안에는 적어도 1개이상의 스레드가 있다.
구성요소를 통해 좀 더 자세히 알아보자.
프로세스에는 적어도 하나의 스레드와 Code, Data, Files 가 있으며 각각의 스레드는 자체 Stack과 Registers 를 가진다.
즉, 메모리 영역에서 프로세스는 Code(Text), Data, Stack, Heap 영역을 가진다.
여기서 해당 프로세스의 스레드에 포함되는 Stack 영역은 지역 변수가 저장되고 기능이 실행되는 영역이다.
또한 아래에서 스레드에 포함된 registers 은 다음 명령어를 가르키는 포인터로 볼 수 있다.
스레드가 여럿일 때 스레드는 해당 프로세스의 code, data, files 에 대해 공유하지만 자체 stack과 registers 는 독립적으로 관리한다.
2. Single-thread 와 Multi-thread
이제 멀티 스레드의 이점에 대해 고민해봐야한다.
싱글 스레드는 스레드가 1개, 멀티 스레드는 같은 프로세스 안에서 스레드가 여럿일 때를 말한다.
그렇기 때문에 멀티 스레딩을 사용하면 프로그램의 많은 부분을 동시에 실행할 수 있다. ( Multi-tasking )
주요 이점은 아래와 같다.
- Responsiveness ( 응답성,반응성 )
동시 요청에 대한 수가 늘어남에 따라 콘텐츠가 로드될 때까지 시간이 너무 오래걸리거나, 재생 버튼을 눌렀을 때 비디오가 재생되지 않는다거나 하는 등 고객이 기다려야하는 시간이 길어지면 안된다.
싱글 스레드일 경우 고객은 앞선 요청이 끝날때까지 기다려야하지만, MultiThreading 을 이용하면 동시 요청에 대한 작업이 가능하여 응답성을 향상시킬 수 있다.
- Parallelism ( 병행성 )
병렬 프로그래밍은 작업을 분할하여 더 짧은 시간에 문제를 해결하기 위해 일련의 리소스를 사용하는 프로세스이다.
멀티스레딩을 이용하여, 긴 프로그램을 스레드로 나누어 병렬로 실행할 수 있고 이는 결국 프로그램 실행 속도를 증가킬 수 있다.
3. Multi-thread 와 Multi-process
Multi-Process 은 시스템에서 동시에 여러 개의 프로세스를 실행할 수 있고 각 프로세스는 별도의 CPU 또는 코어에서 실행된다. 예를 들어 브라우저를 사용하여 Facebook에서 음악을 듣고 동시에 친구와 채팅할 수 있다.
주요한 특징으로, Multi Process 는 각각의 프로세스가 독립적이기 때문에 보안이 향상된다.
예로는 Microsoft Edge가 있으며 Windows 블로그에서 자세한 내용을 확인할 수 있다.
Multi-Thread 는 단일 프로그램이 두 개 이상의 작업을 동시에 수행할 수 있음을 의미한다. 예를 들어 텍스트 편집기는 인쇄하는 동시에 텍스트를 편집할 수 있다.
주요 특징으로, 스레드는 생성 및 파기 와 동일 프로세스 안에서 스레드끼리 전환하는 것이 프로세스에 비해 빠르기 때문에 Multi Process 에 비해 적은 오버헤드를 유발한다.
각각의 Architecture에는 장/단점이 존재하기 때문에 어느 Architecture을 채택할 지 고려를 해봐야한다.
참고
https://www.geeksforgeeks.org/difference-between-process-and-thread/
https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html
https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html
https://www.javatpoint.com/benefits-of-multithreading
http://www.rnlkwc.ac.in/pdf/study-material/BCA/mp.pdf
https://www.perforce.com/blog/qac/multithreading-parallel-programming-c-cpp
https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-practical-primer
https://dev.to/kwereutosu/multi-threading-and-parallel-programming-1l9m