7 살짜리 아이에게 멀티 스레딩의 개념을 설명해야한다면 어떻게 하시겠습니까? 최근에 인터뷰에서이 질문을 받았습니다. 나는 직업 (해야 할 일)과 노동자 (실)를 사용하는 이야기를 생각해 냈지만 완전히 설득력이 없었습니다 (아이가 너무 어리다고 생각합니다).
이것을 설명하라는 요청을 받으면 어떻게 하시겠습니까?
7 살짜리 아이에게 멀티 스레딩의 개념을 설명해야한다면 어떻게 하시겠습니까? 최근에 인터뷰에서이 질문을 받았습니다. 나는 직업 (해야 할 일)과 노동자 (실)를 사용하는 이야기를 생각해 냈지만 완전히 설득력이 없었습니다 (아이가 너무 어리다고 생각합니다).
이것을 설명하라는 요청을 받으면 어떻게 하시겠습니까?
답변:
정의를 제외하고 기술 용어를 생략하십시오.
꼬마 야 포켓몬에 대해 생각하면서 동시에 껌을 걷고 씹은 적이 있습니까? 이것이 당신의 두뇌 멀티 스레딩입니다.
쉽게 이해할 수있는 내용과 관련시킵니다. 도로에 자동차.
단일 차선 도로를 생각해보십시오. 12 대의 자동차가 달려서 하나씩 운전합니다. 그리고 한 대의 자동차 만 동시에 완성 할 수 있으며, 더 빠른 차는 느린 차를 통과 할 수 없습니다.
그러나 멀티 스레딩을 사용하면 모든 차가 4 차선이있는 넓은 도로에서 운전하는 것과 같습니다. 빠른 자동차는 느린 자동차를 지나갈 수 있습니다.
편집 : 그리고 조심하지 않으면 서로 충돌 할 수 있습니다 ...
나는 빨래를하는 것처럼 설명 할 것이다.
세탁물 3 개와 세탁기 1 개, 건조기 1 대가 있습니다.
모든 사람이 세탁을하는 방법은 세탁을 위해 다음 짐을 넣는 것보다 건조기에 첫 번째 짐을 옮기는 것입니다.
두 번째 세탁물을 세탁하기 전에 첫 번째 세탁물이 건조 될 때까지 기다리는 데 시간이 더 걸린다는 것을 모든 어린이는 이해할 것입니다.
세탁실과 같은 세탁기와 건조기가 더 있으면 더 빨리 짐을 싣고 설명 할 수 있습니다.
이 답변 중 일부는 가슴이 아프다 ... 나는 7 살짜리를 아는 유일한 사람 일지 모른다고 생각합니까 ???
자니 .. 멀티 스레딩은 학교에서 시간을 정리할 때 일어나는 것과 비슷합니다. 수업이 끝난 후 모든 수업을 정리해야합니다. 각 어린이는 기본적으로 실입니다. 장난감을 가져 오는 것이 작업이며 장난감 상자는 공유 리소스입니다.
전반적으로 얼굴에 면접관을 치는 것이 더 좋은 대답이라고 생각합니다.
멀티 스레드는 한 번에 많은 일을하는 것과 같으며 조금씩 수행하는 것과 같습니다.
젊은 호기심 많은 사람 이여, 매일 먹고, 놀고, 자야합니다. 권리? 하지만 왜 한 번 먹지 않습니까? 더 이상 먹을 수 없을 때까지 많이 먹은 다음, 항상 잠을 자고 재미있는 게임을하세요?
글쎄, 당신이 그것을 먹지 않으면, 당신은 이전 식사에서 얼마를 얻었더라도 배가 고프 게 될 것이기 때문에 그렇게 할 수 없습니다. 잠을 자지 않으면 피곤하고 친구들과 놀 수 없습니다. 알 겠어? 해야 할 일이 몇 가지 있지만 한 번에 할 수는 없습니다. 우리는 아침을 먹고, 게임을하고, 점심을 먹고, 다시 게임을하고 ... 마지막으로 "좋은 밤"이라고 말합니다.
컴퓨터가 작동하는 방식이기도합니다. 음악을 약간 재생 한 다음 그림을 그리는 그림으로 전환 한 다음 다시 전환하여 음악을 재생합니다. 그러나 이러한 모든 일을 천 번 수행하는 데 걸린 시간은 눈의 윙크 일 뿐이므로 볼 수 없습니다.
해야 할 6 가지 작업이 있습니다.
각 작업은 1 시간이 걸립니다. 두 형제가 있습니다.
아트 클래스 (멀티 스레드 응용 프로그램)
교사가없는 수업은 없으므로 교사 (메인 스레드)가 필요합니다. 당신이 수업에 도착하면 당신은 앉아서 선생님은 모든 사람을 설명하고 그 날의 그림을 그리도록 수업을 배정합니다.
교사는 하루 동안 모든 학생들에게 그림을 시작하도록 배정합니다 (스레드 초기화 및 과제).
학교에는 페인트가 너무 많기 때문에 모두가 서로 색을 공유해야합니다 (페인트는 메모리를 나타냄).
당신이 용을 그리는 중이고 미친 눈을 원하지만 다른 누군가가 빨간 페인트를 사용하고 있다고 가정 해 봅시다. 다른 사람이 페인트를 사용할 수 없기 때문에 페인트를 직접 가져갈 수는 없습니다. 대신, 당신이하는 일은 정중하게 페인트를 공유 (자원 잠금)하도록 요청하는 것입니다. 조금만 사용한 다음에 전달하십시오. 다시 가져 오기 위해 조금 기다려야 할 수도 있지만 페인트가 필요없는 모든 사람들이 페인트 싸움없이 경쟁 할 수 있습니다.
수업이 끝나면 교사는 수업을 종료합니다 (스레드 참가).
게임 (다중 프로세스 응용 프로그램)
친구와 함께 카드 게임 (또는 수집품과 동등한 게임) :
방과 후에 친구들 (프로세스)과 함께 지낸다 고 말할 수 있습니다. 아무도 당신에게 무엇을 해야할지 말해 줄 교사가 없습니다.
모두가 게임을하기 위해 모입니다 (멀티 프로세스 또는 멀티 레이어 응용 프로그램).
당신은 당신의 카드를 사용하여 상대방을 이길 수있는 방법 (내부 처리)에 대해 열심히 생각하고 아이디어 (메시지 전달)를 생각해 낼 때 파트너와 아이디어를 공유하려고합니다.
실력이 좋아지면 클럽에 가입 할 수 있습니다.
리더 (실행 프로그램) 멤버 (서브 프로그램)
클럽이 정말 좋아지면 전략을 개선하기 위해 서로 소통 할 수있는 특별한 방법 (API)이 나올 수 있습니다.
추상화가 상당히 복잡하기 때문에 여기에서 여러 프로세서 / 코어를 언급하지 않기로 결정했습니다 (그리고 컨텍스트 전환은 여전히 대부분의 응용 프로그램에 투명합니다). 게임의 모든 팀이 별도의 프로세서 / 코어를 나타내며 대부분의 게임은 게임에서 소수의 팀만 함께 플레이 할 수 있기 때문에 여전히 짜증이납니다. 미래는 많은 사람들이 여러 팀의 게임에서 함께 플레이 할 수있는 MMORPG와 비슷한 것 같습니다.
많은 핵심 컴퓨터 또는 많은 호스트 네트워크에서 분산 처리 시스템에 대한 어린이 메타포를 개발하려고 시도하는 것은 꽤 흥미로울 것이지만 Op가 요구 한 것은 아닙니다.
노트 :
위의 메시지 전달은 프로그램이 서로 대화하는 데 사용하는 여러 가지 형태의 통신에 대한 참조입니다. 사람과 마찬가지로 응용 프로그램은 서로 대화하는 여러 가지 방법이 있습니다. 쓰기는 직렬화 된 데이터를 파이핑하는 것과 같고, 말하는 것은 네트워킹과 같으며, 속삭이는 것은 암호화 된 연결을 통한 네트워킹과 같으며, 데이터베이스는 스코어 카드 (정의 된 데이터가있는 유한 한 구조)와 같으며 MSMQ를 사용하는 것은 단단한 표면.
그 이외의 다른 형태의 의사 소통은 너무 모호 해져서 구분할 수없는 것으로 간주하기가 어렵습니다.
곁에:
Halo와 같은 온라인 게임을 해본 적이 있다면 그룹에 합류하거나 프로 선수가되는 사람들은 일반적으로 다른 팀의 플레이어가있는 곳과 그들이 사용하는 것을 서로 안내하기 위해 언어를 줄입니다. 콜 아웃을 모르면 정말 불쾌하지만 게임 플레이 중에는 놀랍도록 효과적입니다.
주어진 문화권 안에 사는 대부분의 사람들이 공통 언어를 사용하지만 그 문화 안에서 사람들이 특정 작업을 처리하도록 최적화 된 간결한 도메인 언어를 개발하는 방법은 흥미 롭습니다. 컴퓨팅에서는 API와 비교합니다.
널리 사용되는 모델을 사용하십시오 : 식당 철학자.
파스타 저녁을 먹는 5 명의 철학자.
5 테이블 주위에 포크가 있습니다.
각 철학자는 먹을 포크 두 개가 필요합니다.
일부는 먹습니다. 기다리는 동안 일부 사람들은 철학을 느낍니다.
컴퓨터는 실제로 한 번에 한 가지 작업 만 수행 할 수 있지만 매우 빠르게 작업을 수행 할 수 있습니다. (단순함을 위해 멀티 코어 처리를 생략하고 있습니다.) 그러나 음악을 듣고 동시에 게임을하려면 어떻게해야합니까? 컴퓨터는 (매우 빠르게) 음악 처리와 게임 처리 사이를 전환합니다.