문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 스레드 (문단 편집) ==== 스레드와 프로세스의 차이점 ==== >프로세스: 각각의 은행 지점 >스레드: 은행 지점 하나에 속한 고객 창구 여러 개 프로세스는 서로 완벽히 독립적인 공간을 가진다. 각자가 자기만의 [[스택(자료구조)|스택]]과 데이터 영역을 가지고, 보호받는다. 프로세스는 시작할 때 운영체제에서 PCB[* Process Control Block]와 메모리 공간을 할당받고 초기화하는 과정이 필요하다. 다른 프로세스의 영역을 들여다볼 수 없기 때문에 프로세스끼리 통신하기 위해서 프로세스 간 통신[* IPC: Inter Process Communication]을 활용하거나 공유 [[메모리]]를 생성해 데이터를 주고 받는 등의 번거로운 과정을 거쳐야만 한다. 은행 지점을 하나 새로 세우려면 부동산을 계약하고 내부 인테리어 공사를 진행하며, 은행 지점끼리 연락하기 위해서는 사람이 직접 가거나 전화를 해야 하는 상황을 생각해보면 된다. 반면 한 프로세스가 비정상적으로 종료해도 다른 프로세스에는 영향이 거의 없다.[* 아예 없지는 않다. 서로 공유하는 파일을 깨먹는다거나 하면...] 은행 지점 하나가 화재 등으로 손상되어도 다른 지점에서 업무를 볼 수 있는 것과 비슷하다. 스레드는 스택은 따로따로이지만, 코드 영역과 데이터 영역은 하나를 공유한다. 데이터 영역에 속하는 변수[* 보통 일반적으로 글로벌 위치에 놓은 변수를 사용하나, 힙도 가능.]를 통해서 쉽고 빠르고 편하게 통신할 수 있다. 같은 은행 지점에서는 옆 창구에 말만 하면 바로 알아들을 수 있는 것과 비슷하다. 단, 스레드 하나가 잘못된 연산이나 버그 등으로 비정상 종료한다면 같은 프로세스에 소속된 다른 스레드들까지 모두 [[장비를 정지합니다|강제로 종료된다]]. 또한 스레드를 강제로 종료할 경우 해당 스레드와 같은 자원을 공유하던 다른 스레드에 영향을 줄 가능성이 있기 때문에 스레드에 대해서 교육할 때도 강제로 종료시키는 것은 자제하라고 교육하는경우가 많고 프로그래밍 언어 설계적인 면에서도 임의대로 종료시키지 못하게 하는 방향으로 가고 있다.[* 대표적으로 .NET 계열 언어에서는 닷넷 5.0부터는 쓰레드를 임의대로 종료시키는 [[https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.thread.abort?view=net-5.0|Thread.Abort 메소드]]를 지원 중단하겠다고 선언했다.] [[Linux|리눅스]] 커널 2.2까지는 프로세스로 스레드를 에뮬레이트했기 때문에 정상 상황이라면 훨씬 가볍게 작동해야 할 멀티스레드 프로그램이 도리어 더 무거워지는 기현상이 있었다. 커널 2.4 이후로는 이런 문제가 없다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기