CS/운영체제

쓰레드를 많이 만들면?

혀니리리 2023. 11. 22. 20:45
728x90

🤔 스레드를 많이 쓸수록 항상 성능이 좋아질까? (tistory.com)

 

🤔 스레드를 많이 쓸수록 항상 성능이 좋아질까?

스레드를 많이 쓰면 쓸수록 성능이 높아지는가 프로세스와 스레드를 처음 학습할때, 스레드는 프로세스 내에 존재하는 실행 단위이며, 이 스레드가 여러개인 덕분에 우리가 음악을 들으며 웹서

inpa.tistory.com

스레드가 여러개인 덕분에 음악을 들으며 웹서핑을 하거나 일을 다운받는 '동시작업'이 가능함

그렇다고 멀티스레드가 무조건 성능이 좋은 것은 아님.

 

왜 멀티스레드가 항상 성능이 좋지 않은지

 

멀티스레드는 자원을 공유하기 때문에 프로세스 생성에 비해

장점: 적은 메모리, 적은 자원을 소모 / 컨텍스트 스위칭 빠르다

단점: 여러 개의 스레드가 임계 영역의 공유자원에 접근할 수 있기 때문에 데이터의 일관성, 정확성을 유지하기 위해 동기화 필요

(임계영역: 멀티스레드 프로그래밍에서 공유자원을 접근하는 코드 영역을 의미. ex) 전역변수, heap 메모리영역)

 

* 동기화 기법: 대표적으로 뮤텍스 세마포어같은 잠금 기법이 있음.

=> 한번에 하나의 스레드만 공유자원에 접근할 수 있도록 제한하여 데이터에 대한 일관성 유지.

=> 스레드가 데이터에 접근하기 전에 락(lock)을 획득하고, 접근한 후 락 해제

답변 1) 락 획득 및 해제 작업(동기화 작업)은 추가적인 시간이 소요, 나머지 스레드의 실행을 중지하거나 대기하게 만들어야 하므로 프로그램의 성능 저하 가능,

과도한 동기화로 병목현상 일어나 성능 저하.

 

답변 2) 컨텍스트 스위칭 오버헤드

스위칭하는 과정에서 CPU 시간과 자원을 소모하므로 성능에 제한 발생 가능 => 과도한 스위칭=> 오버헤드 증가

 

답변 3)

싱글스레드: 프로그램 구조 단순하여 개발 쉽고 CPU,메모리를 적게 사용

멀티스레드: 스레드간의 동기화처리, 잘못된 스레드 관리로 인해 메모리 누수, 데드락 등의 문제에 대해 관리 필요하기에 개발 굉장히 복잡해짐.

 

728x90

'CS > 운영체제' 카테고리의 다른 글

데드락(Deadlock)과 해결방법  (0) 2023.11.22
스핀락(SpinLock)  (0) 2023.11.22
컨텍스트 스위칭  (0) 2023.11.20
페이지 폴트(Page Fault)  (2) 2023.11.20
프로세스와 스레드의 차이  (0) 2023.10.01