• 자원을 덜 소비한다
    • 컨텍스트 스위칭이 더 가벼움
    • 사용자 수준 스레드라서
    • 협동적 스케줄링에서는 작업이 자식의 생애 주기 스스로 결정하므로 스케줄러가 작업 상태를 감시할 필요 없음
    • 이렇게 구현된 애플리케이현은 단일 스레드(운체 관점에서)인데도 확장성 뛰어남
  • 공유 자원에 블로킹 안 일으킴
    • 협동적 멀캐에서는 코드 내 특정 지점에서만 작업이 전환됨
    • 그만큼 공유자원에 블로킹 여지 적다
    • 작업 전환 지점 잘 배치하면 임계 구간에서 간섭 일으키지 않게 가능
  • 효율적
    • 혈동적 멀태에선 작업이 실행 중지하고 제어권 넘길 지점 알기에 컨텍스트 스위칭이 더 효율적
      • 하지만, 작업끼리 제어권 주고받는 시점 판단할수있도록 서로를 강하게 의식 해야함
      • 중앙화된 연산이 한 곳에만 있어도 모든 장점 소멸(2장 쇼핑몰 비유 참고)
    • 스케줄러는 어떤 작업이 어디까지 실행해야하는지 알 수 없음
    • 그래서 협동형 멀태에선 시간이 오래걸리는 연산 실행하면 안됨.
    • 꼭필요하다면 주기적으로 제어권 반납해야됨
    • 여러 프로그램 잘게 나눠 수행하면서 서로 제어권 양보한다면 스케줄러로는 불가능한 수준의 동시성 달성 가능
    • 스레드 수십개대신 코루틴 수천 개면 가능

선전혐과 협동형이 상호 배재적인건 아님. 같은 시스템의 서로 다른 추상적 수준에서 함께쓰일수있음. 예를 들어 협동적으로 수행되는 연산을 주기적으로 미리 선점해놓는다면 CPU시간을 더욱 공정히 배분하는 방식도 가능