Zig의 Io.Threaded: 블로킹 syscall을 취소하는 기발한 방법
Zig's Io.Threaded Is Neat
Zig의 새로운 Io 인터페이스 구현 중 하나인 std.Io.Threaded는 평범해 보이지만, 블로킹 syscall을 완전히 취소할 수 있는 독특한 방법을 제공합니다. 이 글은 동시성과 병렬성의 차이, 취소의 중요성, 그리고 POSIX에서 신호(signal)를 이용해 블로킹 syscall을 중단시키는 메커니즘을 설명합니다. 또한 Java의 스레드 인터럽션, pthread_cancel 등 기존 접근법과 비교하며, Zig가 어떻게 언어 수준에서 취소를 깔끔하게 통합하는지 보여줍니다.
취소는 오류가 아닙니다. 왜냐하면 그것이 우연한 성공이 아니기 때문입니다. 반대로, 오류는 페이로드를 가진 취소입니다.
- _old_dude_
제가 저수준 작업을 하던 시절은 전부 Windows 세계였는데, 거기서는 적어도 NT 커널 시절부터 async/cancel이 지원되었습니다. 이를 어떤 추상화 수준에서든 일관되게 감싸는 것은 항상 가치 있는 일이었고, 스레드는 그중 하나의 방법일 뿐입니다. Overlapped I/O를 사용하면 단일 스레드에서 모든 것을 처리할 수 있습니다. Linux는 더 어려워 보입니다. Zig가 이 기능을 더 '일급 시민'으로 지원하는 것은 좋은 일이지만, 반드시 필요한 것은 아니며 유용해 보입니다.
- lll-o-lll
아, 너무 일찍 끝나네요. 더 읽고 싶어요!
- two_handfuls
문법이 정말로 중요하지 않다는 건 알지만, Zig는 문법 면에서 좀 떨어지는 편입니다. 정말 장황하고, 기존 언어들에서 이상하게 골라온 것 같아요. Zig 코드는 보통 읽기 어려운데, 왜냐하면 정말 시끄럽고, 다른 언어에는 없는 이상한 것들이 정당한 이유 없이 존재하기 때문입니다.