분명히 GIL은 참조 카운팅을 보호하기 위해 스레드 간의 전환 컨텍스트를 방지하지만 CPython에서 완전히 안전한 신호 처리입니까?참조 카운팅 작업 사이에 파이썬에서 신호를 잡아서 처리 할 수 있습니까?
답변
신호는 참조 카운팅 작업 도중에 전달되어 처리 될 수 있습니다. CPython이 참조 카운팅을 위해 원자 CPU 명령어를 사용하지 않는 이유에 대해 궁금한 경우, 너무 느립니다. 원자 연산은 메모리 장벽을 사용하여 CPU 캐시 (L1, L2, 공유 L3)와 CPU (ccNUMA)를 동기화합니다. 상상할 수 있듯이 최적화가 많이되지 않습니다. 최신 CPU는 매우 빠르며 빠르며 빠르기 때문에 아무것도하지 않고 데이터를 기다리는 데 많은 시간을 소비합니다. 참조 증가 및 감소는 CPython에서 매우 일반적인 작업입니다. 메모리 장벽은 매우 중요한 최적화 트릭 인 순서가 잘못된 실행을 방지합니다.
참조 카운팅 코드는 신중하게 작성되었으며 멀티 스레딩과 신호를 고려합니다. 시그널 핸들러는 스레드가 할 수 없듯이 부분적으로 생성되거나 파괴 된 Python 객체에 액세스 할 수 없습니다. Py_CLEAR
과 같은 매크로는 가장자리의 경우를 처리합니다. I/O 함수는 EINTR도 처리합니다. 3.3에는 fork()와 execvpe() 사이의 async-signal-safe 함수 만 사용하는 향상된 하위 프로세스 모듈이 있습니다.
걱정할 필요가 없습니다. 우리는 POSIX fu를 아주 잘 알고있는 영리한 사람들이 있습니다.
신호는 매우 간단한 신호 처리기에 의해 포착되며 사실상 주 신호 처리기 기능을 주 스레드에서 호출하도록 예약합니다. C 신호 처리기는 어떤 Python 객체에도 접촉하지 않으므로 어떤 상태도 손상시키지 않습니다. 반면 Python 신호 처리기는 바이트 코드 연산 평가 사이에서 실행되므로 CPython의 내부 상태를 손상시키지 않습니다.
- 1. 파이썬에서 신호를 높일 수 있습니까?
- 2. 파이썬에서 카운팅 모음
- 3. 파이썬 참조 카운팅 출력을 끕니다.
- 4. 어떻게 이것을 파이썬에서 처리 할 수 있습니까?
- 5. 연속적인 SIGSEGV 신호를 처리 할 수 없습니다.
- 6. 어떻게 파이썬에서 WPF로 작업 할 수 있습니까?
- 7. COM interop 참조 카운팅 가이드
- 8. Z3에서 참조 카운팅 유지
- 9. 자동 참조 카운팅 전 처리기
- 10. 하나의 클래스가 신호를 생성하고 다른 클래스에서 처리 할 수 있습니까?
- 11. 파이썬에서 백그라운드 네트워크 작업 처리
- 12. 스레드가 즉시 신호를 배포 할 수 있습니까?
- 13. 이해 참조 카운팅 - 윈도우 설치
- 14. std :: condition_variables를 카운팅 세마포로 사용할 수 있습니까?
- 15. 파이썬에서 C 파일의 #define을 어떻게 참조 할 수 있습니까?
- 16. 블루투스 신호를 반복하거나 재배포 할 수 있습니까?
- 17. Django에서 신호를 수동으로 트리거 할 수 있습니까?
- 18. R로 신호를 트랩 할 수 있습니까?
- 19. 파이썬에서 다음과 같은 신호 처리 동작을 설명 할 수 있습니까?
- 20. 파이썬에서 두 변수를 하나의 조건으로 처리 할 수 있습니까?
- 21. 어떻게 파이썬에서 큰 소수점을 처리 할 수 있습니까?
- 22. 참조 또는 값으로 파이썬에서 데이터 처리
- 23. 파이썬에서 다른 신호를 처리하는 방법
- 24. 신호를 부드럽게하기위한 윈도우 처리
- 25. 내가 참조 카운팅 주위에 전체 사업을 이해
- 26. C 코드를 다룰 때 Python 참조 카운팅/가비지 콜렉션이 있습니까?
- 27. 팀 빌드의 msbuild에서 작업 경로를 어떻게 참조 할 수 있습니까?
- 28. 참조 카운팅/메모리 및 속성 이해하기
- 29. 작업 처리 완료 후 MaxDegreeOfParallelism이 파일을보고 할 수 있습니까?
- 30. CUDA가 자체 작업 대기열을 처리 할 수 있습니까?