내가 쓰레드를 이해한 방법

반응형
반응형

쓰레드는 작업의 한 단위로,

주로 프로세스에서 사용된다. 프로세스는 공장이고, 쓰레드는 일꾼이라고 많은 사람들이 설명한다.

 

그런데!

이 설명으론느 뭔가가 부족하다. 공장인거 알겠고, 일꾼인거 알겠는데... 

멀티 쓰레드는 어떻게 설명하고..., 

싱글 프로세스에서 멀티를 쓰는건 어떻게 설명하지...

 

그래서 곰곰히 생각했다. 어떻게 하면 쓰레드를 더 잘 이해 할 수 있을까?

순간, TV와 리모콘이 떠올랐다.

여기서 TV는 프로세스고 리모콘이 쓰레드라 생각했다. 그랬더니 쓰레드가 조금씩 이해되기 시작했다.

 

보통은 TV와 리모콘은 한개씩 존재한다. TV가 여러 대일경우에는 프로세스가 여러개라고 생각하면 되고,

리모콘이 여러개라면 쓰레드가 여럿인, 멀티쓰레드라고 생각하면 되었다.

 

이제 싱글 프로세스 환경에서 쓰레드를 여러개 사용하는 경우를 생각해보자.

여기에는 규칙이 필요하다. 구동 되고 있는 쓰레드가 있으면 그 쓰레드가 종료되면 다른 쓰레드가 사용해야한다.

그러면 TV와 리모콘은 어떨까?

이런 그림을 상상해 보면 된다. 어떤이가 TV를 다 보면 다른 사람이 TV의 소유권을 가질 수 있게된다.

즉, 리모콘의 소유가 다른 사람으로 넘어갔다는 뜻이다.

(싱글 프로세스에서 멀티 쓰레드가 되는지 안되는지는 정확하게 기억은 나지 않지만... 책에서 비슷하게 보인것 같다. 불확실 하지만 설명한 이유는 어쩌면 이런것도 가능하지 않을까 해서 소개했다.

 

그러면 멀티 쓰레드 환경에서는 어떨까?

쓰레드가 여러개가 동시에 동작하기 때문에 서로 기다릴 필요가 없다.

마치 TV한대에 리모콘이 여러개가 있는 모습이다.

그러면 어떻게 될까? 하나의 리모콘은 올라가는 버튼을 누르고, 또 다른 리모콘은 내려가는 버튼을 누른 다고 한다면,

TV는 아무런 채널을 증가하거나 감소시키지 않는다. 이것이 바로 교착상태다.

물론, 실제로는 이렇게 되지 않는다. 포커스에 맞춰진 리모콘이 우선순위를 갖게 된다. 하지만 모든 리모콘의 우선순위가 동일하다면? 어떤일이 발생할까? 어차피 이건 머릿속으로 밖에 상상할 수 밖에 없다.

 

근데 문제는 이렇게 하면 채널을 바꾸는데 생각보다 오래 걸릴 것 같다. 왜냐하면 서로 동기화가 않았다. 여기서 동기화가 되지 않았다는 이야기는 리모콘을 쥐어진 사람마다 생각이 다르다는 것을 의미한다. 물론, 사람들마다 생각이 전부 다르다면, 특정 번호까지 싱글 때보다 빨리 도달할지도 모른다.

하지만 그럴일은 없을 것 같다. 

그러면 이러한 문제를 어떻게 해결야 할까? 이것이 바로 위에서 언급한 동기화라는 방법이다. 리모콘을 쥐어진 사람들끼리 이야기를 통해  순서나 방법을 정한다면 더 빠르지 않을까?

 

저는 이런식으로 쓰레드에 대해 이해 하였습니다.

어쩌면 이 내용들이 틀린 내용을 내포할지도 모릅니다. 하지만 하나 확실한것은 쓰레드가 뭔지는 더 와닿았는 느낌을 받았습니다. 감사합니다.

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

서블릿과 JSP  (0) 2020.09.24
public , default, protected, private  (0) 2020.07.30
제네릭스 쉽게 이해 하기  (0) 2020.06.18
추상화란 무엇일까?  (0) 2020.06.17
얕은 복사와 깊은복사는 무엇일까?  (0) 2020.06.08

댓글

Designed by JB FACTORY