CHAPTER 15 타임라인 격리하기
6 min read
- 두 액션이 순서대로 나타나면 같은 타임라인에 넣는다
- 두 액션이 동시에 실행되거나 순서를 예상할 수 없다면 분리된 타임라인에 넣는다
- 액션은 순서대로 실행되거나 동시에 실행된다
- 순서대로 실행되는 액션은 같은 타임라인에서 하나가 끝나면 다른 하나가 실행된다
- 동시에 실행되는 액션은 여러 타임라인에 나란히 실행된다
- ++와 +=는 사실 세 단계다
- 이 연산자에는 세 단계로 연산을 한다는 사실이 숨어 있다
- 인자는 함수를 부르기 전에 실행한다
- 함수에 인자를 실행하면 인자는 함수에 전달되기 전에 실행된다
- 단일 스레드, 동기
- PHP 는 기본적으로 멀티스레드를 사용할 수 없습니다
- 단일 스레드, 비동기
- 멀티스레드
- 메시지 패싱(messaging passing) 프로세스
- 순서가 섞일 수 있는 코드
- 순서가 섞이지 않는 코드
- 여러 개의 타임라인은 시간에 따라 다양한 방식으로 실행 될 수 있다
- 타임라인이 실행 가능한 방법을 가능한 순서(possible order)라고 한다
- 타임라인이 하나면 실행 가능한 순서는 하나다
- 타임라인은 적을수록 이해하기 쉽다
- 타임라인은 짧을수록 이해하기 쉽다
- 공유하는 자원이 적을수록 이해하기 쉽다
- 자원을 공유한다면 서로 조율해야 한다
- 시간을 일급으로 다룬다
- 자바 스크립트는 작업 큐(job queue)라고 하는 큐를 가지고 있다
- 이벤트 루프에 의해 처리된다
- 작업 큐에 있는 작업은 이벤트 데이터와 이벤트를 처리할 콜백으로 구성되어 있다
- 이벤트 루프는 이벤트 데이터를 인자로 콜백을 부른다
- 콜백은 이벤트 루프가 실행할 함수
- 이벤트 루프는 단순히 첫번째 인자에 이벤트 데이터를 넣어 콜백함수를 수행한다
- 이벤트가 발행하면 큐에 작업이 추가된다
- 이벤트는 예측 불가능한(unpredictably) 시점에 작업 큐에 들어간다
- 이벤트 루프는 대기 상태로 들어가고 전원을 아낀다
- 가비지 컬렉션 같은 관리 작업을 한다
- 공유하는 자원을 없에 문제를 해결할 수 있습니다
- 전역변수를 지역변수로 바꾸기
- 전역변수를 인자로 바꾸기
- 암묵적 인자 확인하기
- 암묵적 입력을 인자로 바꾸기
- 동기 함수
- 호출하는 곳에서 리턴값을 사용할 수 있다
- 액션을 빼내기 위해 액션을 부르는 곳은 리턴값으로 바꾸고 액션에 리턴값을 인자로 전달한다
- 비동기 함수
- 미래에 어떤 시점에 콜백을 통해 결과를 받는다
- 액션을 빼내기 위해 액션을 부르는 곳은 콜백으로 바꾸고 액션에 콜백을 인자로 전달한다