비동기 프로그래밍
- 독립적으로 발생하는 이벤트에 대한 처리를 위한 동시성 프로그래밍 기법의 총칭.
동시 서버
use std::io::{BufRead, BufReader, BufWriter, Write};
use std::net::TcpListener;
fn main() {
let listener = TcpListener::bind("127.0.0.1:10000").unwrap();
while let Ok((stream, _)) = listener.accept() {
let stream0 = stream.try_clone().unwrap();
let mut reader = BufReader::new(stream0);
let mut writer = BufWriter::new(stream);
let mut buf = String::new();
reader.read_line(&mut buf).unwrap();
writer.write(buf.as_bytes()).unwrap();
writer.flush().unwrap();
}
}
- 이 서버는 한 번에 한 유저의 요청만 처리할 수 있다. 유저A의 요청에 응답하기 전까지는 유저B의 요청을 처리할 수 없다.
- 동시 서버는 클라이언트의 요청에 대한 처리를 이벤트 단위로 분류해 이벤트에 따라 처리를 수행할 수 있다.
- IO 이벤트 감시는 파일 디스크립터를 감시하는 것이다:
- 여러 TCP 커넥션이 있다면, 서버는 여러 파일 디스크립터를 가진다.
- 각 파일 디스크립터에 대한 읽기/쓰기 가능 여부를
select
, kqueue
, epoll
과 같은 함수로 판단한다.
코루틴
- 코루틴은 다양한 의미로 사용되지만, 보통은 중단과 재개가 가능한 함수를 총칭한다.
- 코루틴 문서를 참고.
이 문서를 인용한 문서