싱글그레드와 멀티 스레드는 예전에 공부했던 동기와 비동기와 유사한 개념 같다.(직렬과 병렬의 느낌?)
우선 스레드에 대해서 살표보자.
인터넷에 비유 해보면, 크롬브라우저(프로세스)에서 네이버 접속하기(=스레드1), 음악듣기(=스레드2)
정답은 상황에 따라 다르다. 멀티스레드의 장점과 싱글 스레드의 장점을 살펴보자.
응답성: 프로그램의 일부분이 중단 될떄, 멀트 스레드 모델은 에러 발생시 새로운 스레드를 생성하여 극복한다.
ex) 멀티 스레드가 적용된 웹 브라우저에서 한 스레드가 이미지 파일을 로드하고 있는 동안 다른 스레드에서 사용자와 상호작용 가능함
경제성 : 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원소모가 줄어든다.
context Switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 단일 스레드보다 느리다.
공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
멀티 스레딩을 위해서는 운영체제의 지원이 필요하다.
멀티 스레드 모델은 프로그래밍 난이도가 높다. 또한 스레드 수만큼 자원을 많이 사용한다.
문맥교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 함
여러 개의 스레드가 프로세스의 자원을 공유할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야 한다. 쉽게 말해, 모든 스레드가 일정 자원에 동시에 접근 하거나, 똑같은 작업을 실행하는 경우, 에러가 발생하거나 원하는 값이 나오지 않는다.