Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

멀티 스레딩의 장점과 문제점이 뭘까요? #1

Open
yanghojoon opened this issue Jul 18, 2022 · 4 comments
Open

멀티 스레딩의 장점과 문제점이 뭘까요? #1

yanghojoon opened this issue Jul 18, 2022 · 4 comments

Comments

@yanghojoon
Copy link
Contributor

멀티스레딩의 장점

  1. 일단 응답성이 높아지며 사용자에게 좋은 사용 경험을 제공할 수 있다는 점입니다.
    이미지 로드같은 시간이 오래 걸리는 연산을 비동기로 작동하는 별도의 스레드에서 실행한다면 연산을 처리하면서도 여전히 사용자에게 응답이 가능해지기 때문입니다.
  2. 자원 공유가 원활하게 가능합니다.
    프로세스의 경우 공유 메모리를 사용하거나 메시지 전달의 방식을 통해서만 리소스를 공유할 수 있지만, 스레드의 경우 프로세스의 자원 즉 코드 / 데이터 / 힙 / 파일 / 신호 등을 공유하고 있어 훨씬 원활한 자원 공유가 가능합니다.
  3. 멀티 프로세스에 비해 훨씬 경제적입니다
    프로세스를 생성하는 경우 메모리와 리소스를 많이 사용하며 비용이 큰 작업입니다. 이에 반해 스레드의 경우 프로세스의 자원을 공유하면서 스레드를 생성하고, 자원을 공유하고 있기 때문에 PCB에 다양한 정보를 가지고 Context Switch를 하는 프로세스에 비해 훨씬 경제적입니다.

멀티스레딩의 문제점

  1. 자원을 공유하고 있기 때문에 보안 문제가 발생할 수 있습니다.
  2. 스레드의 한 부분에서 문제가 발생하게 되면 전체 프로세스가 멈춰버리는 문제가 있습니다.
    프로세스의 경우 하나의 프로세스가 멈추더라도 다른 프로세스는 문제가 없이 동작하기 때문에 이는 멀티프로세스에 비해 단점입니다.
  3. 동시에 공유 자원(코드, 데이터, 힙, 파일, 신호 등)에 접근하면서 Race Condition이 발생할 수 있습니다.

혹시 추가적인 의견이나 잘못된 정보가 있으면 말씀해주세요!

@Hansangjin98
Copy link
Member

오 깔끔한 정리+ 꿀정보 감사합니다!! 👍👍👍

멀티스레딩의 장점에서 3번에 해당하는 내용을 제가 봤던 자료를 바탕으로 덧붙이자면,
스레드는 프로세스 내에서 Stack만 따로 할당받기 때문에 Context Switching시 Stack영역만 처리하면 돼서 프로세스에 비해 전환 속도가 빠르다는 내용도 있을 것 같아요!

@yojuyoon
Copy link
Contributor

결국 모두 장단점이 있는 것 같아요 :) 정리 감사합니다~! 공부하면서 Context Switching이 왜 많은 비용이 드는지 살펴보았는데 그 이유는

  • Cache 초기화
  • Memory Mapping 초기화
  • 항상 커널이 실행

과 같은 이유로 비용이 많이 발생하는 것 같아요! 때문에 멀티 스레딩을 사용함으로서 상진님이 말씀하신 이유로 인해 비용 절약이 가능하네요!

@dochoi-bot
Copy link

멀티스레딩 장점

  • 응답성: 연산이 오래걸리는 작업중에도 사용자에게 응답가능
  • 자원 공유: 프로세스는 공유메모리와 메시지 전달 기법을 통해서만 자원 공유, 이러한 기법은 프로그래머에 의해서 처리되어야한다. 하지만스레드는 자동으로 프로세스의 자원과 메모리를 공유
  • 경제성: 프로세스 생성은 비용이 많이드는작업, 스래드는 자원을 공유하기 때문에 스레드는 더 경제적이다.
  • scalability(규모 적응성): 멀티프로세서 구조에서 각각의 스레드가 병렬로 서로다른 프로세서에서 처리 가능 ( 단일 스레드 프로세스는 프로세서가 많더라도 오직 한 프로세서에서만 실행됨

병행성(Concurrency)과 병렬성(Parallelism)

  • 병행성은 동시에 작업이 처리되는것, 병렬성은 실제로 동시에 실행되는 것
  • 병렬성(Parallelism) 없이 병행성(Concurrency)을 가질 수 있다.

@dochoi-bot
Copy link

사용자 스레드

  • 커널 위에서 지원되며 커널의 지원 없이 관리된다.

커널 스레드

  • 운영체제에 의해 직접 지원되고 관리된다.

궁극적으로 커널 스레드와 사용자 스레드는 어떤 연관관계가 존재해야 한다.
다대일, 일대일, 다대다 모델

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants