몇 가지 CPU 문제가있는 토네이도 응용 프로그램에서 작업하기 시작했습니다. CPU 시간은 시간이 지남에 따라 단조롭게 증가하여 CPU를 100 %로 최대화합니다. 시스템은 현재 주 스레드를 차단하지 않도록 설계되었습니다. 차단해야하는 작업이 필요한 경우 비동기 드라이버를 사용할 수 없으면 차단 작업을 수행 할 다른 스레드가 생성됩니다.적절한 체크 간격은 어떻게 결정합니까?
따라서 우리는 거의 모든 CPU- 바운드와 거의 모든 IO- 바운드 인 다른 스레드를 가지고 있습니다. 내가 읽은 것에서 이것은 GIL에 문제가 생기는 완벽한 방법 인 것 같습니다. 게다가, 필자의 프로파일 링은 우리가 신호를 기다리는 데 많은 시간을 소비하고 있음을 보여줍니다. (이것은 __semwait_signal
이 수행하는 것으로 가정합니다.) 이는 제한된 이해에서 GIL이 갖는 효과와 일치합니다.
sys.setcheckinterval
을 사용하여 검사 간격을 300으로 설정하면 CPU 속도가 크게 느려집니다. 내가 결정하려고하는 것은 체크 간격을 늘려야할지, 아니면 300으로 남겨 두어야하는지, 아니면 그것을 올리면 겁나는가하는 것이다. 결국, 나는 CPU 성능이 나아 졌음을 알았지 만, 이것이 시스템의 응답성에 부정적인 영향을 미칠지는 조금 걱정된다.
물론 올바른 대답은 Google에서 GIL을 고려하기 위해 아키텍처를 다시 생각해야한다는 것입니다. 그러나 그것은 즉시 할 수있는 것이 아닙니다. 그렇다면 단기간에 취할 수있는 적절한 행동 방침을 어떻게 결정할 수 있습니까?
스레드가 제대로 종료되고 있다고 확신합니다. 또한,로드 하에서 약간의 성능 차이를보고 있습니다. 부하로 인해 CPU 시간이 더 빨리 증가하게됩니다. –