<aside>

동기성과 블로킹 (Call stask)

</aside>

왜 JS는 싱글 스레드인가?

  1. DOM 조작의 안전성: 여러 스레드가 동시에 DOM을 수정하면 충돌 발생
    1. 스레드 A가 노드 삭제, 스레드 B가 같은 노드 수정을 시도한다면?
  2. 동시성 문제 회피
    1. Race Condition 원천 차단
      1. DOM 조작뿐만 아니라 공유 상태를 다루는 모든 경우에서 발생할 수 있음
    2. 락(Lock) 메커니즘 불필요
  3. 애초에 JS 초기 설계 목적이 브라우저에서 간단한 스크립팅이었다.
    1. 복잡한 멀티스레딩은 오버스펙이었음

블로킹: 메인 스레드를 점유하는 동기 작업

블로킹이 발생하는 동안..

언제 문제가 되는가?

  1. 무거운 연산

    1. 대용량 배열 처리
    2. 복잡한 계산 (암호화, 이미지 처리)
  2. 동기 API 호출

    1. 응답받을 때까지 블로킹
  3. 긴 루프

      for(let i = 0; i < 1000000; i++) {
         heavyWork();
       }
    

싱글 스레드 == 느림?