안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
프로세스와 스레드
운영체제에서 실행 중인 하나의 애플리케이션을 프로세스라고 합니다.
사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아
애플리케이션의 코드를 실행하는데 이것이 바로 프로세스입니다.
하나의 애플리케이션은 다중 프로세스를 만들기도 합니다.
예를들어 크롬 브라우저를 여러개 실행했다면 실행한 갯수만큼 크롬 프로세스가 생성됩니다.
멀티 태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것을 말합니다.
예를 들어 인터넷 검색을 하면서 동시에 음악을 들을 수 있습니다.
하지만 멀티 태스킹이 꼭 멀티 프로세스를 뜻하는 것은 아닙니다.
한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션들도 있습니다.
예를 들면 카카오톡 같은 메신저는 채팅만 할 수 있는 것이 아니라 동시에 파일 전송도 가능합니다.
하나의 프로세스가 여러가지 작업을 할 수 있는 이유는 멀티 스레드에 있습니다.
스레드 : 한 가닥의 실이라는 뜻입니다.
한 가지 작업을 실행하기 위한 순차적으로 실행할 코드를 실처럼 이어 놓았다고 해서 유래된 이름
하나의 스레드는 하나의 코드 실행 흐름이기 때문에
한 프로세스 내에서 스레드가 두 개라면 두 개의 코드 실행 흐름이 생긴다는 의미입니다.
멀티 프로스세가 애플리케이션 단위의 멀티 태스킹이라고 한다면
멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 볼 수 있습니다.
멀티 프로세스들은 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 서로 독립적입니다.
따라서 하나의 프로세스에서 오류가 발생해도 다른 프로세스에게 영향을 미치지 않습니다.
하지만 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에
하나의 스레드가 예외를 발생시킨다면 프로세스 자체가 종료될 수 있어 다른 스레드에게 영향을 미칩니다.
예를 들어서 인터넷 검색을 하면서 미디어 플레이어로 음악을 듣고 있을 때
인터넷이 오류가 생겨 종료되어도 음악은 계속 들을 수 있습니다.
하지만 멀티 스레드로 동작하는 메신저의 경우 파일을 전송하다
예외가 발생하면 메신저 프로세스 자체가 종료되기 때문에 채팅 스레드도 같이 종료됩니다.
때문에 멀티 스레드에서는 예외처리를 확실히 해주어야합니다.
멀티 스레드는 대용량 데이터의 처리 시간을 줄이기 위해
데이터를 분할해서 병렬로 처리하는 곳에서 사용되기도 하고,
UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해서 사용하기도 합니다.
또한 다수 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용됩니다.
멀티 스레드는 애플리케이션을 개발하는데 꼭 필요한 기능이기 때문에 반드시 이해하고 활용할 수 있어야합니다.
메인 스래드
자바 애플리케이션은 메인 스레드가 main() 메서드를 실행하면서 시작됩니다
메인 스레드는 main() 메서드의 첫 코드부터 아래로 순차적으로 발생하고,
main() 메서드의 마지막 코드를 실행하거나 return문을 만나면 실행이 종료됩니다.
메인 스레드는 작업에 필요한 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있습니다.
즉 멀티 스레드를 생성해서 멀티 태스킹을 수행합니다.
싱글 스레드 애플리케이션에서는 메인 스레드가 종료되면 프로세스도 종료되지만,
멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않습니다.
메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않습니다.
=======================================================================