クイズ: 並列分岐と合流
한국어 원문으로 표시합니다.
순서대로 잘 돌던 그래프를 병렬로 바꾸자 InvalidUpdateError: At key 'note': Can receive only one value per step 이 났다. 가장 정확한 해석은?
- 병렬 실행은 같은 상태를 두 번 읽어 경쟁 조건을 만든다
- 원래 있던 덮어쓰기가 드러난 것이고, 그 열쇠에 합치는 규칙이 없다
- 노드 수가 수퍼스텝 상한을 넘었다
- 체크포인터가 없어 동시 쓰기를 직렬화하지 못했다
나란히 둔 노드 셋의 결과가 이어 붙는 열쇠에 모였다. 그 순서를 정하는 것은?
- 노드 이름의 사전 순
- 노드를 그래프에 더한 순서
- 각 노드가 실제로 끝난 순서
- 매 실행 달라져 정해져 있지 않다
Send("probe", {"source": name}) 로 부른 노드가 받는 것은?
- 전체 상태에 source 키가 더해진 딕셔너리
- Send 가 넘긴 딕셔너리 — 전체 상태가 아니다
- 전체 상태의 얕은 복사본
- 앞 노드가 돌려준 갱신 딕셔너리
자료원 노드들을 각각 END 로 보내 놓고 모으는 노드를 따로 두었다. 무엇이 문제인가?
- END 로 가는 엣지가 여러 개면 그래프가 컴파일되지 않는다
- 모으는 노드가 상태를 읽을 수 없다
- END 로 간 갈래의 결과가 상태에서 지워진다
- 모으는 노드로 들어오는 엣지가 없어 그 노드가 언제 도는지 정해지지 않는다
자료원 스무 곳을 한꺼번에 흩뿌리지 않고 폭에 상한을 둘 때, 고르는 규칙에서 가장 중요한 것은?
- 상한을 홀수로 두어 동점을 피하는 것
- 동점까지 갈라 완전한 순서를 만들어 같은 입력에 늘 같은 자료원을 고르는 것
- 가장 최근에 갱신된 자료원을 먼저 고르는 것
- 상한을 자료원 수의 절반으로 맞추는 것
자료원 셋 중 하나가 예외를 던지면 어떤 일이 생기며, 무엇으로 고치는가?
- 그 갈래만 건너뛰므로 고칠 것이 없다
- 그 수퍼스텝 전체가 예외로 끝나 성공한 갈래의 결과도 사라지므로, 실패를 값으로 돌려준다
- 재귀 한도에 닿아 멈추므로 한도를 올린다
- 체크포인터가 자동으로 되감으므로 재실행만 하면 된다