실행 흐름의 단위라는 게 뭔 말인지 감이 안 잡힘
[질문] 혼공 보는데 스레드 이거 잘 이해가 안 되네
익명(39.7)
2024-09-25 15:50
추천 0
댓글 12
다른 게시글
-
김대기가 회사에서 얌전한 이유 [11][일반] 익명(223.62) | 24.09.25추천 8
-
대기야 회사에서 갤질하지마라 내가 지켜보고 있다 ㅋㅋ [1][일반] 익명(223.38) | 24.09.25추천 0
-
일단 내 상사가 김대기말투긴함 [1][일반] 익명(223.33) | 24.09.25추천 0
-
lg이노텍 학벌/학점확실히 본다 [16][일반] 차에코푼쒸..(healthy3804) | 24.09.25추천 0
-
비아냥 댓글도 문젠데 질문자들도 수준 비슷함 [6][일반] 익명(211.219) | 24.09.25추천 4
-
플젝 방문자수가 중요하지 않은 이유 [1][일반] 익명(175.119) | 24.09.25추천 0
-
면접 말이야 프로젝트 관련해서 질문하면 내가 구현한 부분만 물어보나? [7][일반] 익명(182.214) | 24.09.25추천 0
-
오카방 링크좀.. [1][일반] 익명(211.36) | 24.09.25추천 0
-
포트폴리오 쓸 때 성능 개선 사항 수치로 나타낼까? [6][일반] 익명(219.255) | 24.09.25추천 0
-
톰캣 최종분석 이책[일반] 익명(211.234) | 24.09.25추천 0
그만 두셈 걍
장난이고 식당에 비유해서 생각해봐
식당으로 치면 일 동선 같은 거 말하는 건가?
주방 = 서버단
요리사 = 스레드 정확히 동치되는 개념은 아닌데 대충 이렇게 생각해봐
프로세스는 실행중인 프로그램 인스턴스임 독립적인 힙 스택 데이터 등 메모리공간을 갖고 실행됨 운영체제의 관리 하에서 한 프로세스의 실패나 성공은 다른 프로세스에 영향을 주지 않음 아래 댓글처럼 한 도시 내의 각각 다른 식당이라 생각하셈 스레드는 프로세스 내의 작업 단위고 프로세스 내의 자원을 공유하고 동시에 실행될 수 있고 스레드마다 스택은 별도로 가지지만 나머지는 공유함 또한 스레드간 종속성이 있기에 한 스레드가 비정상적으로 종료되면 다른 스레드에 영향을 미침 식당 내 여러 활동들이라 생각하셈 주문 조리 배달 서빙 등등
주문 스레드가 성공적으로 종료되지 않으면 조리 서빙 배달 프로세스에도 전부 영향을 미치듯이 한 프로세스 내에서 스레드 작업 수행 여부는 다른 스레드에 영향을 미침 프로세스간에는 어디있는지도 모르는 다른 식당이 망하든 말든 우리 식당에서는 알바가 아닌것처럼 운영체제하에서 일반적인 경우에는 영향을 주지 않음
쓰레드 없이 그냥 메인메소드만 실행시키면 코드순서대로 수행하잖아 근데 나는 그 순서대로 수행하면서 다른것도 동시에 해줬으면 하는거지 이 때 쓰이는게 쓰레드임 실행흐름에 단위라는건 코드를 수행하는 커서를 떠올리면 이해될거임 - dc App
프로세스는 보호(protection)의 단위, 스레드는 그 보호막 안에서 실행을 하는 단위라고 생각하면 됨. 간단하게 program counter만 생각해보면 이해하기 쉬움. pc 레지스터는 그 프로그램의 몇 번째 명령어를 실행 중인지 가리키고 있는 거잖아? 근데 이 pc 레지스터의 상태 값을 A라고 하자. A를 메모리에 저장 시켜 넣고, 내가 실행 시키고 싶은 프로그램의 위치 주소 값 B를 새로 집어 넣으면 그 명령어부터 다시 시작 되겠지? 그러면 프로세스는 B라는 실행 흐름을 가지게 되는 것임.
그러면 프로세스 안에는 A와 B라는 두 실행 흐름이 생기게 되는 거지. 물론 실제로는 새로운 실행흐름(스레드)를 만들기 위해 pc값 뿐만 아니라 cpu 내의 필요한 모든 필요한 상태값들을 저장해야겠지만. 그 상태값들이 TCB가 되는 것임. 잘 생각해보면 코어의 특정 시점의 상태값을 저장하는 방식으로 컨텍스트 스위칭 하기 때문에 virtual core 개념이라고 볼 수 있음.. 논리적으로 봤을 때 cpu의 실행 상태를 스냅샷으로 찍어서 1:1 대응 상태로 만드는 거니까.
프로세스는 기본적으로 서로 다른 유저 레벨 프로그램 (메모장, 브라우저 등등)들이 멀티 프로세스로 실행 될 때 서로 메모리 영역 침범 하지 말라고 보호하는 보호막 개념으로 보면 됨. 그리고 그 안에서 스레드라는 실행 흐름이 존재하는 거지. 그리고 결국 프로그램의 실행이란 cpu에서 명령어 처리하면서 수행 되는 거기 때문에 그 과정을 여러 개로 만든 게 멀티 스레딩임.
준비된 식재료를 바탕으로 요리 1개를 완성하는 과정을 프로세스라고 한다면 그에 필요한 식재료를 다루는 절차를 스레드로 보면 됨 예를 들어 스파게티 만들 때 면 삶기와 스파게티 소스 만들기는 동시에 할 수 있는가 하면 스파게티 소스를 만들기 전에는 먼저 소스에 들어갈 식재료를 썰고 가공하는 작업이 필요할 수 있음