운영체제에서 실행 중인 하나의 애플리케이션을 프로세스라고 합니다. 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션 코드를 실행합니다.
ex) 크롬을 여러개 실행하면?
두개의 프로세스가 생성됩니다. 하나의 애플리케이션은 여러 프로세스 (다중 프로세스)를 만들기도 합니다.
한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름입니다. 한 프로세스 내에서 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다는 의미입니다.
두 가지 이상의 작업을 동시에 처리하는 것을 의미합니다. 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행합니다. (멀티 태스킹은 꼭 멀티 프로세스를 의미하는 것은 아닙니다.)
멀리 스레드는 다양한 곳에서 사용됩니다. 대용량 데이터의 처리 시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는 데 사용할 수도 있고, UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수도 있습니다.
메모리 공간과 시스템 자원의 소모가 줄어듭니다. 스레드 간 통신이 필요한 경우 별도의 자원을 이용하는 것이 아니라, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용합니다. 멀티 스레딩을 통해 시스템 처리량이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램 응답 시간이 단축됩니다.
멀티 스레딩을 기반으로 프로그래밍할 때에는 공유하는 자원에 대하여 고민이 필요합니다. 서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있습니다. (따라서 동기화 작업이 필요합니다.)
동시성: 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 일으킨다.
병렬성: 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행된다.
다른 프로세스가 시작할 수 있도록 이미 실행 중인 프로세스를 멈추는 것을 Context Switching 라고 한다.
프로그램이 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것입니다.
트레이싱: 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법입니다. 객체에 in-use flag를 두고 사이클마다 사용 중인지 표시(mark)합니다. 그 후 사용하지 않는 걸 확인하면 객체를 삭제하는 단계를 통해 메모리를 정리합니다.
레퍼런스 카운팅: 객체를 참조하고 추적하는 방식입니다. 객체 참조값이 바뀌거나, 줄어들어 0이 됐을 때 객체와 관련된 메모리를 정리합니다. (객체가 0이 됐다는 뜻은 사용하고 있지 않다는 말과 같습니다.)
많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미합니다.
일반적으로 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간입니다. 첫 작업 이후 데이터에 대한 요청이 있을 경우, 더 빠르게 처리할 수 있습니다.
캐시의 데이터는 일반적으로 Ram과 같이 빠르게 엑세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있습니다.
기본 스토리지 계층(SSD, HDD)에 엑스스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높입니다.
속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장합니다. 완전하고 영구적인 데이터가 있는 데이터베이스와는 대조적입니다.