카톡하면서 코딩하는게 어떻게 당연해? 멀티 스레드에 대해

Heejeong Choi·2021년 9월 11일
0
post-thumbnail
post-custom-banner
부트캠프에서 운영체제를 공부하고 멀티 스레드 프로그래밍에 대해 더 알아보는 과제가 있었다. 이 때, 특히나 멀티 스레드 프로그래밍의 사례와 필요성에 중점을 놓고 공부를 하였는데, 이 부분을 복습하기 위해 해당 글을 포스팅한다.

멀티 스레드(Multi Thread)란?

  • 하나의 프로세스를 다수의 실행 단위로 구분해 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상 시키는 것
  • 하나의 프로그램에서 동시에 여러 개의 일을 수행할 수 있도록 해주는 것이지만, 사실상 분산 처리를 통해서 동시에 실행되는 것 처럼 보이는 것이다.

대표적인 사례는 어떻게 될까?

  • 대표적인 예시로는 Window가 있다. 반면에 DOS는 한번에 한가지 작업만 할 수 있는 것 처럼, 싱글 쓰레드이다.

멀티 스레드를 사용해야 할 이유

  • 응답성 👍🏼 유투브를 보면서 메일을 쓰는 것 처럼! 사진 다운로드 하면서 검색을 할 수 있는 것 처럼💁🏼‍♀️
  • 경제성 👍🏼 당연히 메모리를 공유하기에 메모리 공간과 시스템 자원 소모가 확실하게 줄어든다.
  • 멀티 프로세서 활용 👌🏼 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있기 때문

이런 멀티 스레드도 단점은 있지😢

  • 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록을 임계 영역(critical section)이라고 하는데, 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근해 엉뚱한 값을 읽어오거나 수정할 수 있다. 여기서 바로 '동기화'가 필요하다.
  • 동기화를 통해 스레드의 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤 할 수 있다. 하지만 불필요한 부분까지 동기화를 할 경우에 과도한 lock으로 인해 병목 현상을 발생시켜 성능이 저하될 수 있으니 주의해야한다💦
  • 추가적으로, context switching(스레드 간의 작업 전환), 동기화, 데드락 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용하기 때문에 단일 스레드보다 더 느린 경우도 종종 있다.

여러가지 일을 동시에 하게 해주는 고마운 기능이지만, 이러한 기술에도 역시나 장단점은 꼬리표처럼 따라온다. 다음번에는 멀티 쓰레드의 단점인 데드락, context switching, 동기화에 대해서 자세히 알아보아야겠다.
profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.
post-custom-banner

0개의 댓글