Net 패키지 가져오기와 교착 상태 감지의 상호 작용
Go 프로그램에서 프로그램이 실행되는 동안 채널 작업이 차단되면 프로그램은 결국 "교착 상태" 오류가 발생합니다. 그러나 net 패키지를 가져올 때 동작이 변경됩니다.
문제의 코드 조각:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch net/http 패키지를 가져오지 않으면 프로그램이 "교착 상태" 오류와 함께 종료됩니다. 이는 채널 작업(버퍼되지 않은 채널로 전송)이 영원히 차단되고 교착 상태 감지기가 문제를 식별할 수 있는 비동기 작업을 수행하기 위해 다른 고루틴이 실행되고 있지 않기 때문입니다.
그러나 net/http 패키지를 가져오더라도 프로그램은 교착 상태에 빠지지 않습니다. 이는 넷 패키지를 가져오면 교착 상태 감지기를 효과적으로 비활성화하는 백그라운드 폴링 고루틴이 시작되기 때문입니다.
넷 패키지에는 네트워크 연결 관리 기능이 포함되어 있으며 고루틴을 사용하여 연결을 비동기적으로 처리합니다. 이러한 백그라운드 폴링 고루틴은 현재 HTTP 연결이 설정되거나 처리되고 있지 않은 경우에도 계속 실행되므로 프로그램이 교착 상태 감지기에 비차단 상태로 표시됩니다. 결과적으로 채널 작업이 차단되었음에도 불구하고 프로그램이 "교착 상태" 오류로 종료되지 않습니다.
이 동작은 GitHub 문제 https://github.com/golang/go/issues에서 논의되었습니다. /12734.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3