▲neo 8달전 | parent | favorite | on: GN⁺: 스레드 대신 async/await를 선택하는 이유(notgull.net)Hacker News 의견 Async/await와 단일 스레드 자바스크립트 모델처럼 단일 스레드에서의 async/await는 단순하고 잘 이해되어 있음. 스레드를 사용하면 여러 CPU가 문제를 처리할 수 있고, Rust는 락 관리를 도와줌. 다른 우선순위의 스레드를 가질 수 있으며, 계산에 제한이 있는 경우 필요함. 멀티 스레드 async/await는 복잡함. 계산에 제한이 있는 섹션에서는 모델이 붕괴될 수 있음. Rust에서 멀티 스레드 계산은 잘 작동하지 않음. 문제점으로는: Futex 혼잡 붕괴: 일부 저장소 할당자에서 문제가 될 수 있음. 불공정한 뮤텍스의 기아: 표준 Mutex와 crossbeam-channel 채널이 불공정함. Async/await 대 스레드 비판은 복잡성에 관한 것이 아니라, 선택에 따라 생태계가 분열되고 하나가 열등해지는 것에 대한 것임. Rust 생태계는 IO 작업을 하려면 전부 async/await를 사용해야 한다고 결정함. Rust가 async/await 이외의 것들을 더 조합 가능한 추상화로 만들었다면 불만이 사라졌을 것임. 기사에 대한 문제점 웹 서버 예시 하나만 제시되었고, 스레드에 대해 잘못 해결됨. 프로그래머들은 OS 스레드가 아닌 개념적, 의미적 스레드를 원함. OS 스레드는 비용이 많이 들고, 우리는 저렴한 스레드를 원함. 웹 서버 예시에서의 타임아웃 구현 문제점. 다루지 않은 순간들 async/await는 단일 스레드에서 실행되므로 락이나 동기화가 필요 없음. async/await에서의 오류 전파는 명확하지 않음. 네트워크 I/O에서 백프레셔도 언급되어야 함. 취소에 관한 중요한 점 미래의 어떤 작업도 쉽게 취소할 수 있음. 스레드에서의 취소는 복잡하고, 강제 스레드 중단은 신뢰할 수 없음. Rust의 async 모델에서는 모든 futures에 외부에서 타임아웃을 추가할 수 있음. Async/await에 대한 마케팅 같은 캠페인 async/await는 기술적 실수였으며, 커뮤니티에 큰 비용을 초래함. Rust는 여전히 가장 좋은 언어이지만, 이 논쟁이 영원히 이어질까 걱정됨. Async/await 대 파이버 Rust는 이전에 그린 스레드를 가졌었고 의도적으로 제거됨. futures를 언제든지 드롭할 수 있는 능력이 큰 비용을 수반함. async/await의 조합성을 칭찬하는 것은 이상함. Rust의 async/await 주요 이점 스레드나 동적 메모리가 없는 상황에서도 작동할 수 있음. 동시성을 사용하여 코드를 간결하게 작성할 수 있음. Async/await에 대한 오해 단일 스레드에서의 동시성 메커니즘이 필요한 이유를 이해하지 못하는 사람들이 있음. UI 프로그래밍, GPU와의 통신, 런타임 간 통신 등에 async/await가 유용함. Async/await 대 스레드 선택 이유 async/await는 클라이언트/요청/작업 상태의 메모리 사용량을 줄일 수 있음. 상태 압축은 메모리 속도가 느린 현대에서 성능에 중요함. async/await와 CPS는 클라이언트당 메모리 사용량을 줄이는 데 효과적임.
Hacker News 의견
Async/await와 단일 스레드
Async/await 대 스레드
기사에 대한 문제점
다루지 않은 순간들
취소에 관한 중요한 점
Async/await에 대한 마케팅 같은 캠페인
Async/await 대 파이버
Rust의 async/await 주요 이점
Async/await에 대한 오해
Async/await 대 스레드 선택 이유