멀티 스레딩?
멀티 스레딩이 뭐냐.
여러개의 스레드가 동시에 진행되는 것을 의미한다. 하나의 프로세스 안에 여러개의 스레드가 존재하고, 그 스레드들이 자원들은 공유하되, 작업은 독립적으로 이루어지는 구조이다.
이걸 왜 써?
동시에 왜 씀?
- 메모리 공간과 시스템 자원의 소모가 줄어든다.
여러개의 복잡한 일들을 하나의 프로세스가 처리할 수는 없기에, 일을 분리 시켜서 여러개로 나눠준다면 속도도 빨라질 수 있고, 또한 나온 결과물들을 공유하는 구조이면 더더욱 속도는 빠르게 이루어질 수 있기 때문이다.
- 프로세스간 통신 방법에 비해 스레드간의 통신 방법이 간단하다.
별도의 자원을 이용하여 데이터를 주고 받는게 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap영역을 이용하여 데이터를 주고받기 때문이다.
오호 그럼 이게 짱 아님?
짱..이긴 한데 단점도 존재한다.
- 서로 다른 스레드가 데이터와 heap영역을 공유하기 때문에 한 스레드가 사용중인 변수나 엉뚱한 값을 가져올 수도 있다.
아무래도 같은 공간을 공유하기 때문에 일어날 수 있는 가장 흔한 문제가 아닐까 싶다. 현재 사용중인 변수를 가져올 수도 있고, 엉뚱한 값을 가져와서 결괏값이 이상하게 나타날수도 있으니 말이다.
- 병목현상(메모리 릭같음)이 발생해서 성능이 저하될 수 있다.
병목현상이 뭔지부터 알아봐야할 것 같은데, 병목현상은 데이터의 처리 속도가 느려짐에 따라서, 다음에 오는 데이터 처리 또한 지연되는 현상을 말한다. 따라서 이렇게 되면 다 같이 느려지게 되는 것이다.
그럼 사용할 때 고려해야할 것도 있나?
있다!
- UI업데이트와 관련된 작업들은 메인 스레드에서 구현해야 한다.