티스토리 뷰

반응형

유니티는 공식적으로 멀티스레드를 지원하지 않는다.

다만 비공식 적인 부분으로 멀티스레드및 임계영역등을 사용할수 있다.

이경우 일반적인 연산이나 네트워크 통신 부분만을 대상으로 프로그래밍을 하는편이 좋다.

리소스 부분을 메인스레드가 아닌 부분에서 사용하려고 한다면 임계영역이고 뭐고 간에 어찌되었든 충돌이 나게 된다.

 

어찌하다보니 PC / 모바일 겸용 메신저를 유니티로 만들게 되었는데 WEB이랑 통신할때 메인스레드 하나로 모든것을 처리하면 통신상태가 나쁘거나 느릴때 매우 버벅이면서 작동이 잘 안될 정도로 문제를 일으키는 경우가 있다. 이때 사용하게 되었다.

 

스레드를 만들기 전에

 

using System;

using System.Threading;

 

참조를 걸어준다.

스레드 생성과 임계영역 생성에 필요한 참조이다.

 

적당한 스레드 관리 클래스를 만들어주고

public class ThreadManager : MonoBehaviour
{
    private object lockObject = new object();

    임계영역 처리를 위한 오브젝트 생성
    private Thread thread = null;

    스레드들을 관리할 변수 선언

    void Start()

    {

        thread = new Thread(UpdateThread)

        thread.Start();

    }

   

    void OnDestroy()

    {

        thread.Abort();

  thread = null;

    }

 

    void UpdateThread()

    {

    }

}

이런식으로 잡아주면 된다.

UpdateThread내에서 스레드 처리에 관련된 처리를 해주면 된다.

만약 임계영역 처리가 필요하다면

연속으로 처리될 부분을

lock (lockObject)
{
    처리할내용~~~~

}

으로 묶어주면 잘 처리된다.

 

다만 유니티에서는 공식적으로 멀티스레드를 지원하지 않으므로 지나친 남발은 삼가하여야 한다. 또한 멀티스레드로 만들기 시작하면 디버깅이 복잡 해지지만 이정도는 프로그래머 개인 역량 영역이기에 긴말은 필요 없다..

 

꼭 필요한 부분이나! 단순 연산이 메인스레드에 많이 포함된다 싶으면 사용하기를 추천한다.

 

 

반응형
댓글