본문 바로가기
IT관련

스레드(Thread)란?

by 집도리잡동사니 2023. 5. 14.
반응형

회사에서 일을하다가 서버 프로그램 데몬에 대해서 볼 일이 있어서 보다가 스레드에 대한 개념을 한번 더 공부하게 되어서 포스팅 하게되었습니다! 예전 포스팅에서 세마포어와 뮤텍스에 대해 설명한적이 있는데, 그때도 스레드에 대해서 잠깐 말했었는데, 자세히 포스팅 하게되기까지 시간이 오래걸렸네요! 스레드에 개념중 세마포어와 뮤텍스에서 대해서는 세마포어와 뮤텍스링크를 걸어드리겠습니다. 궁금하신분들은 한번 읽어보세요!

 

1. 스레드(Thread) 란 ?

Thread란 프로세스 내에서 독립적인 실행 흐름으로, 하나의 프로그램이 여러 작업을 동시에 처리할 수 있게 해줍니다. 각 스레드는 독립적인 스택 메모리를 가지고 있으며, 프로세스의 다른 스레드와 공유하는 자원에 접근할 수 있습니다.

 

2. Process와 Thread의 차이

Process와 Thread의 차이는 우선 이해하기 쉽게 Process가 더 큰개념이라고 이해하시는게 편합니다. Process는 OS(운영체제)로부터 독립된 메모리 공간을 할당받고 최소한 하나의 Thread(main Thread)를 가지고 있습니다.

Thread는 Process가 운영체제로부터 할당받은 자원을 다시 Thread에게 할당받아 사용하게되며, Thread는 프로세스 내에서 동작하는 실행 흐름을 의미합니다. 또한 Process가 할당받은 메모리 공간을 공유하기 때문에 하나의 Process안에 있는 Thread끼리는 서로 데이터를 공유할 수 있지만 Process들 끼리는 OS로부터 할당받는 자원이 다르기 때문에 데이터를 공유할 수 없습니다.

또한 생성과 소멸의 영역의 관점에서 봤을대 프로세스는 운영체제로부터 자원을 할당받아야 하기 때문에 프로세스 생성과 소멸의 관점에서 비용이 많이 들고 Thread에 비해 상대적으로 느리고 무거운 작업입니다.

동작 방식에서는 프로세스는 각각의 독립적인 실행의 흐름을 가지고 있기 때문에 영향을 주지 않아서 프로세스간의 충돌이나 예외 발생 시 다른 프로세스에 영향을 미치지 않지만 Thread는 하나의 프로세스 안에서 공유자원에 접근하기 때문에 동기화와 상호작용에 대해서 생각하고 신중히 설계해야합니다.

 

결론 ! 주인장의 생각 빠밤!(여담)

회사에서도 얘기를 들었던적이 있었는데, 멀티스레드 프로그램을 설계하시는분들은 실력이 엄청 높은 수준일꺼라고 말을 들었었거든요, 그럼 왜 굳이 어려운 스레드 프로그램을 만드는것인지?! 에 대한 저의 생각은 메모리 영역 때문일꺼라고 생각해요, Process는 생성 시킬때마다 OS에서 자원을 할당해줘야 하지만 Thread는 이미 Process에게 할당한 자원에서 나누어서 사용하기 때문에 메모리 적인 부분에서 이점이 있고, 공유 자원을 사용함으로써 동기화나 여러 상호작용면에서 유리한 면이 있는거 같습니다.
그리고 저는 java로 웹쪽 개발을 하면서 따로 생각을 안했었는데, WAS에서 이미 자동으로 Thread방식으로 구성되었기 때문에 저는 개발을 할때 Thread부분은 생각을 하지 않으면서 개발을 했었는데, 만약 Thread 프로그램을 만들게 되면 메모리 적인 측면을 많이 신경써야할꺼 같습니다, 하나의 Thread에서 많은 자원을 사용하게되면 다른 Thread에서 뻗거나 멈추거나 Exception이 날수도 있고, 공유자원에 대해서 주소값을 공유하기 때문에 Thread1에서 저장한 데이터를 Thread2에서 데이터를 바꿔버리면 의도한대로 프로그램이 실행되지 않을수도 있기 때문에 Thread 프로그램은 생각해야 될 부분이 많을꺼 같습니다.

제가 이해한 Thread 프로그램을 최대한 쉽게 설명드렸다고 생각하는데, 다들 이해 하셨기를 바랍니다.

 

긴글 읽어주셔서 감사합니다. 만약 틀린 부분이 있다면 댓글을 남겨주시면 수정하겠습니다! 감사합니다.

728x90
반응형

댓글