본문 바로가기
카테고리 없음

[개발자9] 공부로그

by k워누 2023. 7. 1.

Coroutine(코루틴)과 Thread

 

  • 작업 하나하나의 단위 : Coroutine Object
    • 여러 작업 각각에 Object 를 할당한다.
    • Coroutine Object 도 엄연한 객체이기 때문에 JVM Heap 에 적재 된다. (코틀린 기준)
  • 동시성 보장 수단 : Programmer Switching (No-Context Switching)
    • 프로그래머의 코드를 통해 Switching 시점을 마음대로 정함 (OS 관여 X)
    • Suspend (Non-Blocking) : Object 1 이 Object 2 의 결과가 나오기까지 기다려야 한다면, Object 1 은 Suspend 되지만, Object 1 을 수행하던 Thread 는 그대로 유효하기 때문에 Object 2 도 Object 1 과 동일한 Thread 에서 실행될 수 있다.
  • ex)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Co : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    IEnumerator attack()
    {
        yield return new WaitForSeconds(1.0f);
        Debug.Log("attack");

        for(; ; )
        {
            yield return new WaitForSeconds(1.0f / 30.0f);
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            StartCoroutine(attack());
        }
    }
}

 

Thread

 

  • 작업 하나하나의 단위 : Thread
    • 각 Thread 가 독립적인 Stack 메모리 영역 가짐
  • 동시성 보장 수단 : Context Switching
    • 운영체제 커널에 의한 Context Switching 을 통해 동시성 보장
    • 블로킹 (Blocking) : Thread A 가 Thread B 의 결과가 나오기까지 기다려야 한다면, Thread A 은 블로킹되어 Thread B 의 결과가 나올 때 까지 해당 자원을 못 쓴다