Clojure go 블록 내부에서 Thread/sleep을 사용하는 것에 대한 내부 충돌이 있습니다. 일반적으로 블록을 이동 내부에 장기 실행 프로세스를 권장하고 Stuart Sierra mentions that sleeping in go block is not preferred되지 않은 : 일반적으로Clojure 블록 내부 스레드/수면
, 나는을 차단 수면, 또는하지 않는 작업/O가 안전하게 이동에 넣을 수 시스템의 처리량에 큰 영향을 미치지 않고 차단할 수 있습니다.
필자의 경우 채널의 메시지를 듣고 그룹화하여 사용자에게 빠르게 알려주고 싶습니다. 또는 하나의 메시지 만 나오면 사용자에게 알립니다. 필자의 경우, 여러 메시지가 빠른 속도로 연속적으로 나오거나 일정한 간격으로 메시지가 오지 않는 경우가 일반적입니다.
이렇게하려면 채널에 입력을 대기하는 go-loop
블록이 있어야합니다. 그것이 수신되면 잠시 (최소한 두 번째 또는 두 번째) 잠자기 상태가되고 그 동안에 다른 입력이 채널에 도착했는지 확인하고 사용자가 전체를 알리거나 첫 번째 메시지를 전달합니다.
내 응용 프로그램에는 이러한 go
블록이 하나만있을 것입니다. Clojure는 블록을 제공하는 스레드를 항상 하나 이상 생성하므로 실제로 하나의 스레드를 잠그는 것이 문제가되지 않아야합니다. 그러나 이론적으로, 이와 같은 스레드를 묶지 않고 이것을 처리하는보다 우아한 방법이 있는지 궁금합니다.
감사 무리, 제한 시간 내 목적을 위해 완벽합니다! – Domchi