러스트에서 구현할때 생긴 문제와 해결책
1. 비동기 객체를 박싱해서 type erase 해버리면 성능이 구려짐
impl Trait로 existential return type 만들고 lazy하게 스케줄링해서
딱 스케줄링할때 한번만 박싱하면 되도록 함
2. 비동기 함수의 스택은 상태머신의 필드로 표현되는데 이때 스택 변수의 참조를 로컬변수로 들고있다면 자기참조 구조체가 돼서 이동등으로 메모리 주소가 변할때 댕글링이 돼버림
Pin이랑 Unpin 만들어서 위험한 타입들은 이동 못하게 막음
그리고 위처럼 !Unpin 갖고 놀다가 딱 한번만 Box::pin 등으로 Unpin으로 만들어주면됨 아니면 Unpin인 비동기 객체를 직접 만들어도 되고
..? 먼소리임 이미 있는데 - return 0;
async 그거 그냥 스레드 호출하는거 아님?
polling 말하는거임? 그건 그냥 비동기 IO 인데 - return 0;
async 쓰는게 거의 IO 때문인데 그게 제일 중요한거 아니냐
아닌데요 - return 0;
노드가 울겠다
C++ async 말고 보편적으로 사용하는 async 코루틴이랑 await 키워드 말하는것
C++20에도 올라와있더만
코루틴은 그냥 future 에 설탕 뿌린건데. IO polling 과는 무관하다 ㅇㅅㅇ - return 0;
IO 블로킹 끝나면 코루틴 깨우고 이런거 안됨?
그런건 되는데 다 쓰레드 띄우는겁니다 - return 0;
코루틴객체 여러개 두고 한스레드에서 동시에 기다리고 이런거 안된다는거? 그럼 머하러 만드냐
뭐하러 만드냐고요? future chaining 에 진절머리가 난 불쌍한 어린양들을 구제하기 위해서죠 - return 0;
async future promise 다 있음 그게 본문에 말하는 그거인지는 모르겠지만..
그건 러스트로치면 oneshot channel 같은거자너
코루틴써서 중간에 나가는게 돼야지
코루틴은 C++20인걸로 알고 구현체는 아직 본적이 없네
ㅎㅎ; 러스트는 잘 모름 근데 코루틴얘기 나오는거 보면 힙한거는 맞나봄요?
코루틴이 얼마나 인싸기능인데;
async를 std에 싸서 드셔보세요
당신께서 생각하시는게 꽈이썬의 asyncio 같은 것이라면 Boost ASIO 가 그것이고요 ㅇㅅㅇ 오히려 네트워킹 TS 에 가깝습니다 - return 0;
그리고 따지면 그건 그냥 비동기 IO 지 control flow 자체가 비동기인게 아님. 후자는 보편적인 하드웨어에서는 멀티쓰레딩이나 그린 쓰레딩으로만 구현 건웅 - return 0;
ASIO 본적은 없는데 비동기 IO 라이브러리면 당연히 코루틴으로 await쓰는 구현으로 바꿀거같은데 아님?
std에서 그 용도로 만들진 않았더라도 ASIO에선 그렇게 쓸거같은데
ㅁㄹ 난 필요없는 기능이라 써본 적도 없음 - return 0;