이 프로세스는 높은 디스크 IO 작업이 아닌 높은 CPU 및 높은 메모리 작업이기 때문입니다. 즉, 이 프로세스는 CPU 성능을 테스트합니다. 그리고 우리는 컴퓨터에 실제 다중 프로세스나 다중 스레드가 없으며 모두 CPU 스케줄링을 통해 시뮬레이션된다는 것을 알고 있습니다. 따라서 높은 CPU 작업의 경우 단일 프로세스 또는 단일 스레드 방식을 사용하는 것이 가장 좋습니다(멀티 코어는 증가한다고 간주할 수 있음). 이는 전환으로 인한 소비를 피하기 때문에 가장 효율적인 방법입니다. 스레드 또는 프로세스 사이.
이에 대해서는 Nginx의 아키텍처를 참고할 수 있습니다. Nginx의 높은 부하도 단일 프로세스로 완료됩니다.
동시 연결을 처리하는 모델은 여러 가지가 있습니다. 멀티스레딩도 하나의 유형이고, epoll로 대표되는 Non-Blocking I/O + 다중화도 하나의 유형입니다. 올바르게 사용하는 한, 새로운 연결이 들어온 후 읽기/쓰기는 짧은 시간 동안이라도 차단되지 않습니다.
초보 베테랑 운전자는 다양한 동시성 처리 모델을 설명하는 Dan Kegel의 The C10K 문제를 읽었습니다. 당신의 영어가 무난하다면, 그래도 읽어볼 것을 권합니다. 아, 그런데 대규모 동시성을 처리하기 위해 실제 시스템에서 이루어진 다양한 기술적 개선이 포함되지 않은 개념을 학습하는 경우 Richard Stevens의 "Unix 네트워크 프로그래밍"이 더 명확하게 설명되어 있으며 중국어 번역도 더 쉽습니다. 읽다. .
이 프로세스는 높은 디스크 IO 작업이 아닌 높은 CPU 및 높은 메모리 작업이기 때문입니다. 즉, 이 프로세스는 CPU 성능을 테스트합니다. 그리고 우리는 컴퓨터에 실제 다중 프로세스나 다중 스레드가 없으며 모두 CPU 스케줄링을 통해 시뮬레이션된다는 것을 알고 있습니다. 따라서 높은 CPU 작업의 경우 단일 프로세스 또는 단일 스레드 방식을 사용하는 것이 가장 좋습니다(멀티 코어는 증가한다고 간주할 수 있음). 이는 전환으로 인한 소비를 피하기 때문에 가장 효율적인 방법입니다. 스레드 또는 프로세스 사이.
이에 대해서는 Nginx의 아키텍처를 참고할 수 있습니다. Nginx의 높은 부하도 단일 프로세스로 완료됩니다.
CPython의 멀티스레딩은 "실제" 멀티스레딩이 아닙니다(자세한 내용은 GIL 참조). 언어를 변경하지 않으면 솔루션은 로드 밸런서(haproxy 등)를 사용하여 다중 프로세스를 수행하는 것입니다. 앞쪽.
동시 연결을 처리하는 모델은 여러 가지가 있습니다. 멀티스레딩도 하나의 유형이고, epoll로 대표되는 Non-Blocking I/O + 다중화도 하나의 유형입니다. 올바르게 사용하는 한, 새로운 연결이 들어온 후 읽기/쓰기는 짧은 시간 동안이라도 차단되지 않습니다.
초보 베테랑 운전자는 다양한 동시성 처리 모델을 설명하는 Dan Kegel의 The C10K 문제를 읽었습니다. 당신의 영어가 무난하다면, 그래도 읽어볼 것을 권합니다. 아, 그런데 대규모 동시성을 처리하기 위해 실제 시스템에서 이루어진 다양한 기술적 개선이 포함되지 않은 개념을 학습하는 경우 Richard Stevens의 "Unix 네트워크 프로그래밍"이 더 명확하게 설명되어 있으며 중국어 번역도 더 쉽습니다. 읽다. .