본문 바로가기

카테고리 없음

스레드와 멀티스레드(공부하고 보니.. 이 포스팅은 매우부족해 차후 추가포스팅하겠습니다^^)

 안녕하세요! 오늘은 어제 못한 스레드에 대해서 포스팅 해보겠습니다ㅎㅎ

 

 음, 그전에 여담을 하자면! 얼마 전부터 종종 주변 지인 중 개발에 종사중인 분들을 만나고 상담도 받고 그랬는데요!

그 중에 아는 형과 이런 대화를 했었습니다..

 

 나 : "형, 그럼 제가 취업 전에 게임 개발로 진로를 정한다면 어떤 공부를 하면 좋을까요 ?"

 형 : "음, 일단 너 여태까지 주로 쓰는 언어는 뭐고, 졸프는 뭘로했어 ?"

 나 : "저 자바랑 자바스크립트 사용해서, 웹, 웹앱, 모바일 프로그래밍 등등 했어요.."

 형 : "음.. 원하는 회사가 코테를 보면, 자바로는 힘들거야.. 게임개발이 하고싶다면, C++로 코테를 봐보도록 노력해보고

        다이렉트X나 그래픽스 같은 경험은 없겠지? 그럼 클라이언트인지 서버인지 엔진개발인지 어디로 가고싶은지 찾          아 보고 노력해봐~ 기본적으로 스레드에 대해 잘 써본적도 없겠지.. 음, ..........................."

 

요렇게 이어진 대화인데요! 스레드 이야기가 하고싶어서 대화를 넣었습니다ㅎㅎ

 

 스레드를 잘 모른다.. 저 얘기를 계속 하다보면, 제가 과거 자바프로젝트 당시 갤러그 게임을 자바 스윙라이브러리를 통해 구현한 적이 있다고 하였습니다. (제가 만든 갤러그도 엄연한 게임입니다!하하)

 갤러그 해보신 적 있나요 ? 갤러그는 내가 컨트롤 가능한 한 개체로 무작위 혹은 프로그래밍 된 방식으로 움직이고 공격하는 개체들을 죽여 점수를 쌓아가는 게임인데요, 이러한 많은 개체들 어떻게 각자 따로 움직일까요 ? 어떻게 죽은 개체를 없애고 새로운 개체가 나올까요 ? 보통은 스레드를 통해 가능케 합니다.

 

 그럼 스레드는 무엇인가? 프로세스라는 말과 공통점과 차이점을 가지는 단어입니다.

 과거 운영체제 수업 중 교수님께서 프로세스라는 단어를 엄!청!! 강조했던 기억이 있는데,

결국은 시험에까지 나왔었습죠.. ㅎㅎ 프로세스라는 단어! '현재 실행중인 (단 하나의) 프로그램'을 말합니다. 

CPU의 코어 하나당 한개의 작업만을 수행할 수 있습니다.

현재 제가 쓰는 노트북은 코어가 6개인데요, 과거 펜티엄4 까지는 1개의 코어로 작동했는데, 한개의 작업밖에 수행하지 못한다면 ? 그래서 '컨텍스트 스위칭' 같은 기법으로 사람에게 눈속임(?) 비슷하게 작동했을 겁니다! 물론 그당시엔 최고의 기술이었겠죠?ㅎㅎ

 하지만! 이제는 코어가 여러개입니다ㅎㅎ 각각에서 프로세스가 동작할 수 있습니다 !

 그런데, 프로세스 얘기를 왜 이렇게 길게했냐.. 하면,

각 '코어 안에서 동작하는 프로그램 단위'를 스레드라고 하기때문입니다ㅎㅎ 

 프로그램은 프로세스와 비슷한 단어지만, 조금은 달라요! 프로세스는 실행중인이라는 수식어가 붙고, 프로그램은 붙지 않습니다. 죽어있는 프로세스인거죠! 

 그렇다면, 프로세스를 다르게 정의한다면, 프로세스란 (최소 한개 이상의 스레드로 이루어진) 실행 중인 프로그램 이라고 할 수 있겠습니다.

 

 아~ 그럼 프로세스 안에서 여러 개의 스레드가 동작할 수 있구나~! 가 핵심인거죠!

 여러 개의 스레드는 각각 독립적이면서도 연관성 있게 동작합니다. 스레드는 같은 프로세스 내에 있다면, 서로의 동작을 공유하기 때문이죠! 서로의 스레드 내, 변수에 접근이 가능합니다. 그래서 갤러그에서 개체끼리 서로 죽이고,죽는 일도 생기는것이구요!

  

 아하! 그럼 스레드가 3개면 연산의 범위를 특정기준으로 나눠, 각각 연산의 결과를 합칠 수도 있겠다(?)

빙고! 맞습니다.. 그렇게 되면, 당연히 연산결과를 배출하는 속도가 빠르게 되고, 이게 목적입니다 ㅎㅎ

 이렇게 서로 특정기준을 통해 작업 속도를 개선시키는 것을 병렬화라고 합니다.

 오늘은 스레드의 개념과 목적에 대해서만, 간단히 했는데 사실 매우 부족한 설명입니다ㅠㅠ

그래도 간단히 설명했다는 것에 의의를 두고 봐주시겠어요?

꼭 다음에 스레드에 대해 더 공부하면 구현 방법에 대해서도 포스팅 할 기회를 만들겠습니다 ㅎㅎ

 

 오늘 포스팅은 여기서 마치겠습니다. 

 감사합니다^^