입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이들은 같은 자원(CPU, 메모리)을 공유하면서도 독립적으로 실행됩니다.
예를 들어, 메신저 앱에서는 한 스레드는 메시지를 수신하고, 다른 스레드는 화면을 그리며, 또 다른 스레드는 알림음을 재생하는 식으로 역할을 나눌 수 있습니다.
코어는 물리(하드웨어)적으로 존재하는 것입니다. 원래 컴퓨터에서 하나의 코어는 하나의 작업만 처리할 수 있고, 여러 개의 코어가 있어야 여러 작업을 동시에 처리할 수 있었습니다.
하지만 스레드라는 개념이 생기며 하나의 코어에 여러 개의 프로세스를 실행할 수 있도록 만들어졌습니다. 뒤에서 설명하겠지만 스레드는 OS에서 사용하는 일종의 '단위'입니다.
이렇게 하나의 코어에 여러 개의 스레드를 실행할 수 있도록 만든 것이 멀티코어 프로세서입니다.
CPU를 사용합니다. 각 코어가 독립적으로 작업을 처리할 수 있기 때문에, 병렬로 스레드를 실행하면 전체 프로그램의 속도를 크게 향상시킬 수 있습니다.
운영체제는 각 코어에 스레드를 적절히 배분하여 효율적인 병렬 처리를 가능하게 합니다. 하지만 모든 작업이 병렬 처리에 적합한 것은 아니므로, 적절한 스레드 설계가 필요하다고 합니다.
암묵적 스레딩은 프로그래머가 명시적으로 스레드를 만들지 않아도, 시스템이나 라이브러리가 내부적으로 자동으로 병렬 처리를 수행해 주는 방식입니다. 대표적인 예로 OpenMP, 멀티 쓰레드 라이브러리, 쓰레드 풀 등이 있습니다.
예를 들어, Python의 concurrent.futures 모듈은 스레드 풀을 자동으로 관리해줍니다.