"안녕하세요, Amigo! 새롭고 매우 어려운 주제가 있습니다. 죄송합니다. Java뿐만 아니라 일반적으로 프로그래밍에서도 가장 복잡한 주제 중 하나로 간주되는 경우가 많습니다. 다중 스레딩 에 대해 이야기하고 있습니다. "

예를 들어 우주선 경주 게임과 같은 일반적인 컴퓨터 게임을 상상해 보십시오. 운석과 순찰 순양함을 피하면서 광대한 우주를 날고 있습니다. 24명의 다른 사람들이 이 불법 경주에 당신과 함께 참여하고 있습니다.

그런 게임을 작성하기로 결정했다고 가정해 보겠습니다. 프로그램은 명령(키보드 입력)을 추적하고, 우주선을 이동하고, 궤도를 계산하고, 충돌의 결과를 결정하고, 이 모든 것을 사용자 화면에 그려야 합니다. 이것은 매우 복잡한 작업입니다.

성장하는 운송 회사에 대한 예에서 "매우 복잡한 문제"를 어떻게 해결했는지 기억하십니까?

우리는 그것을 독립적인 부서로 나누고 그들이 상호 작용할 수 있는 방법을 엄격하게 지정(표준화)했습니다.

"하지만 독립된 부분이 다른 부분과 병렬로 일부 작업을 수행해야 할 때 우리는 무엇을 해야 합니까?! 이 질문에 대한 대답은 스레드 입니다 ."

프로그램을 코드 주위를 돌며 명령을 실행하는 작은 로봇 으로 상상해 보십시오 . 먼저 한 줄에서 명령을 실행한 다음 다음 줄로 이동합니다.

"나는 내 마음에 그것을 볼 수 있습니다. 조각 케이크!"

"아주 좋습니다. 이제 이러한 로봇이 여러 대 있다고 상상해 보십시오. 한 로봇이 사용자 입력을 처리하는 동안 두 번째 로봇은 해당 입력을 기반으로 개체를 업데이트합니다. 세 번째 로봇은 이러한 개체를 화면에 표시하는 코드를 실행합니다. 1초에 여러 번, 네 번째는 선박이 충돌했는지 여부를 확인하고 충돌한 경우 충돌 결과를 계산합니다."

따라서 우리는 프로그램을 독립적인 부분/객체로 나눌 수 있을 뿐만 아니라 이러한 부분이 서로 독립적으로 작업을 수행할 수 있도록 만들 수도 있습니다. 개별 부품 간의 상호 작용이 적을수록 프로그램이 덜 복잡해집니다.

관리자를 편지를 보내는 스크립트로 대체할 수 있다고 상상해 보십시오 . 그리고 회사의 다른 부서에서는 변화가 있었다는 사실조차 알 수 없었습니다. 이런 종류의 일이 26세기 초에 일어났고 훌륭한 결과를 낳았습니다. 대부분의 관리자, 심지어 최고 경영진은 평균적인 복잡성의 스크립트로 성공적으로 대체될 수 있습니다. «사무실 플랑크톤 조합»이 개입한 후에야 관리자의 대량 해고가 끝났습니다. 그러나 나는 빗나간다.

"얼마나 흥미로운가!"

"코드를 실행하는 이러한 "작은 로봇"이 여러 개 있을 수 있을 뿐만 아니라 서로 통신하고 새로운 로봇을 생성할 수도 있습니다."

"새로운 로봇을 생성하시겠습니까?"

"예, 새로운 작업을 수행하기 위해서입니다. 때로는 다른 로봇(또 다른 스레드)을 만들어 현재 스레드(로봇)와 동시에 어떤 작업을 수행하는 것이 유리합니다."

" 좋은 것 같지만 어디에 사용할지 생각이 나지 않습니다. "

왜 우리는 그것들을 « 스레드 »라고 부릅니까?

"로봇마다 색상이 다르고 명령을 수행할 때 색상으로 명령을 표시한다고 상상해 보십시오. 작은 로봇이 이동하는 경로는 연필이 남긴 선과 같습니다. 이 경로는 로봇 뒤에 실처럼 이어 집니다 . 바늘."

각각의 «소형 로봇»에는 수행하도록 만들어진 작업이 있습니다. 스레드는 이 작업을 수행하는 동안 실행되는 명령 집합이라고 생각할 수 있습니다.

화물을 배달하기 위해 우주선을 타고 있다고 가정해 봅시다. 그러면 «화물 배달»이 귀하의 임무이며 귀하는 그 일을 수행하는 중입니다. 그리고 당신의 비행 경로는 당신의 실입니다. 각각의 새로운 작업, 아직 완료되지 않은 각 작업에는 자체 스레드(여전히 통과해야 하는 경로)가 있다고 말할 수 있습니다.

"즉, 작업과 이를 실행하는 "작은 로봇"이 있습니다. 그리고 스레드는 로봇이 작업을 완료하는 동안 이동하는 경로일 뿐입니다."

"정확히."

그것이 모든 것이 내부 깊숙이 작동하는 방식입니다. 컴퓨터에는 프로세서가 하나만 있기 때문에 한 번에 하나의 명령만 실행할 수 있습니다. 프로세서는 계속해서 스레드 사이를 전환합니다. 새 스레드로 전환하고 몇 가지 명령을 실행한 다음 다음 스레드로 전환하고 몇 가지 명령을 실행하는 식입니다. 그러나 스레드 간 전환은 초당 수백 번 발생하므로 모든 스레드가 동시에 실행되는 것처럼 보입니다.

멀티스레딩 - 1