thread::spawn(move || ...)
클로저 안으로 들어간 값은 새 스레드로 이동하므로 Send여야 합니다.
Send와 Sync는 외울 표라기보다,
값이 경계를 넘는 순간 컴파일러가 던지는 두 가지 질문입니다.
thread::spawn(move || ...)클로저 안으로 들어간 값은 새 스레드로 이동하므로 Send여야 합니다.
&T를 나눠 갖기불변 참조 자체를 다른 스레드로 보낼 수 있으면 T는 Sync입니다.
tokio::spawn여러 워커 사이를 오갈 수 있는 태스크는 보통 Send future여야 합니다.
자동 판정이 안 되면 내부 불변식을 사람이 증명해야 하므로 unsafe 영역입니다.
String값 자체를 옮기는 데 적합해 대부분의 기본 조합과 함께 Send입니다.
Rc<T>참조 카운트가 원자적이지 않아 Send와 Sync에서 제외됩니다.
Arc<Mutex<T>>Arc는 소유 핸들을 나누고 Mutex는 내부 변경을 직렬화합니다.
RefCell<T>단일 스레드 내부 가변성에는 좋지만 공유 참조 기준인 Sync에는 맞지 않습니다.
채널은 값을 옮기는 쪽이라 Send를 주로 드러내고,
공유 상태는 참조를 나누는 쪽이라 Sync를 함께 드러냅니다.
어떤 경계를 넘는지 먼저 보면 컴파일러 에러의 방향도 빨리 읽힙니다.