▲GN⁺ 2024-11-30 | parent | ★ favorite | on: 파이프라인이 가끔 "멈추는" 이유: 버퍼링 문제(jvns.ca)Hacker News 의견 버퍼링된 접근은 일정 바이트 수나 시간이 지나면 플러시해야 함. 하드웨어 인터페이스에서 유사한 문제를 해결하는 일반적인 방법임 사용자 공간에서 버퍼링하는 라이브러리는 데이터를 처음 버퍼링할 때 적절한 타이머를 설정해야 함 타임아웃 파라미터는 인수로 전달하거나, 인간의 시간 척도보다 약간 낮거나, 대역폭/임계값에 비례하거나, 플러싱 오버헤드에 비례하는 것이 좋음 쓰기와 읽기 모두에 적용되며, 데이터 채널에 따라 다를 수 있음 시스템 전체 CPU가 유휴 상태가 되면 모든 버퍼를 플러시하고 싶음 버퍼링은 일반적으로 CPU 절약 기법임 CPU가 유휴 상태가 되면 모든 프로세스에 "버퍼를 플러시하라"는 신호를 보내야 함 NIX 시스템을 20년 이상 다뤘지만, 버퍼링 문제를 항상 잊어버림 Unix를 35년 이상 사용했지만 버퍼링 작동 방식을 완전히 이해하지 못했음. 이 설명이 유익했음 "비버퍼링"과 "라인 버퍼링"을 혼동하고 있음 비버퍼링은 성능을 저하시킬 수 있으며, 여러 소스가 동일한 파이프에 쓰는 경우 잘못된 출력을 생성할 수 있음 라인 버퍼링은 터미널의 기본값이며, 파이프에 적합함 버퍼는 화면에 출력을 인쇄하는 것보다 버퍼에 쓰는 것이 상대적으로 매우 느리기 때문에 존재함 UART 작업 시 자주 발생하는 문제이며, 다양한 해결책이 있음 특수 문자 사용, 길이 기반 접근, 시간 기반 접근 등 다양한 방법이 있음 Ctrl-C를 누르면 버퍼 내용이 손실될 수 있음 대부분의 프로그램은 SIGINT에서 버퍼를 플러시할 것이라고 생각함 Unix에서 버퍼링 문제를 겪었으며, 모든 'awk' 구현이 동일하게 작동하지 않음 얼어붙은 파이프 농담을 놓친 기분임
Hacker News 의견
버퍼링된 접근은 일정 바이트 수나 시간이 지나면 플러시해야 함. 하드웨어 인터페이스에서 유사한 문제를 해결하는 일반적인 방법임
시스템 전체 CPU가 유휴 상태가 되면 모든 버퍼를 플러시하고 싶음
NIX 시스템을 20년 이상 다뤘지만, 버퍼링 문제를 항상 잊어버림
Unix를 35년 이상 사용했지만 버퍼링 작동 방식을 완전히 이해하지 못했음. 이 설명이 유익했음
"비버퍼링"과 "라인 버퍼링"을 혼동하고 있음
버퍼는 화면에 출력을 인쇄하는 것보다 버퍼에 쓰는 것이 상대적으로 매우 느리기 때문에 존재함
Ctrl-C를 누르면 버퍼 내용이 손실될 수 있음
Unix에서 버퍼링 문제를 겪었으며, 모든 'awk' 구현이 동일하게 작동하지 않음
얼어붙은 파이프 농담을 놓친 기분임