viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced82fa11d02831fe384ecd5bf5471a0304a0eb0d9715861d5006172a6f1d1d12ac4b56e6889a865cd4c39f23d699c2dc2a7be95709db0f7b5a29179ebacb95b754



러스트에서 구현할때 생긴 문제와 해결책



1. 비동기 객체를 박싱해서 type erase 해버리면 성능이 구려짐

impl Trait로 existential return type 만들고 lazy하게 스케줄링해서

딱 스케줄링할때 한번만 박싱하면 되도록 함




2. 비동기 함수의 스택은 상태머신의 필드로 표현되는데 이때 스택 변수의 참조를 로컬변수로 들고있다면 자기참조 구조체가 돼서 이동등으로 메모리 주소가 변할때 댕글링이 돼버림


Pin이랑 Unpin 만들어서 위험한 타입들은 이동 못하게 막음

그리고 위처럼 !Unpin 갖고 놀다가 딱 한번만 Box::pin 등으로 Unpin으로 만들어주면됨 아니면 Unpin인 비동기 객체를 직접 만들어도 되고