문제

Stackless Python은 멀티 코어를 잘 사용하지 않았으므로 Python 스레드/멀티 프로세싱보다 더 빠른 요점은 어디에 있습니까?

모든 벤치 마크는 Stackless Python Tasklet을 사용하여 Python 스레드 잠금 및 대기열과 비교하여 불공평하며, 원인은 항상 효율성이 낮습니다.

단일 스레드 함수 호출을 사용하는 경우 참조하십시오 없이 잠금은 스택리스 파이썬만큼 효율적이어야합니다

도움이 되었습니까?

해결책

먼저 기능성에 중점을두고 성능이 두 번째에 초점을 맞추십시오 (필요하다는 것을 알지 않는 한).

서버에서 대부분의 시간은 I/O와 함께 사용되므로 다중 코어는 그다지 도움이되지 않습니다. 그렇다면 주로 당신이 작업하고있는 I/O, 멀티 스레딩 파이썬이 가장 간단한 대답 일 수 있습니다.

서버 요청이 CPU 집약적 인 경우, 부모 프로세스 (다중 스레드인지 아닌지), 각 자식 프로세스는 약간의 의미가 있습니다.

실제로 확장을 원한다면 Erlang과 같은 다른 플랫폼을 볼 수 있습니다. 실제로 파이썬을 확장하고 여전히 사용하려면 분산 클러스터의 Erlang 포트로 관리되는 Python 프로세스가있는 분산 Erlang을 볼 수 있습니다.

많은 옵션이지만 시간을 다루지 않는 한 큰 큰, 당신은 아마도 간단한 접근 방식을 취할 수 있습니다.

일찍 출시하고 자주 출시하십시오.

다른 팁

비동기식-루프와 메시지 통과 공관이라는 새롭고 트렌디 한 것이 있습니다. 글쎄, 그것은 전혀 새롭지는 않지만, 지난 5 년 만에 주류에 의해 발견되고 있습니다.

Stackless Python은 VM 자체가 이러한 메시지 전달 및 IO 루프를 더 잘 지원하기 위해 수정 된 Python의 버전이며, 그 트릭은 녹색 스레딩 / 코 루틴입니다.

Python에는 다른 도구 (예 : Twisted and Tornado)로 동일한 작업을 수행하기위한 다른 라이브러리가 있습니다. 스택리스 파이썬 등에 하이브리드 트위스트를 실행할 수도 있습니다.

IO 루프 비트는 Berkley 소켓이 비동기 IO를 수행하는 방식에 직접 맵핑되며, 약간의 노력으로 약간의 노력으로 반응성이 아니라 사전 예방 적으로 확장 될 수 있으며, 예를 들어 최신 Libevent와 같은 파일 시스템 및 네트워크 소켓을 사용합니다.

두 개 이상의 코어를 활용하기 위해 옆으로 확장하는 것은 두 가지 접근 방식이있는 곳입니다. 멀티 스레딩; 공유 상태, 예 : 스레드 또는 프로세스 간 - 다중 프로세싱 예를 들어 메시지 대기열. 스레드 접근 방식이 많은 수의 코어에 대해 잘 작동하는 것은 현재 아키텍처의 일반적인 한계이며, 메시지는 코어 수가 방대되거나 해당 코어가 다른 기계에있는 경우 성능 면적으로 추월합니다. 그리고 당신은 하이브리드 접근 방식을 만들 수 있습니다.

Python VM의 내부 설계 선택으로 인해 일반적으로 다중 발전기만큼 멀티 스레딩에서 효율적이지 않으므로 다른 플랫폼에서보다 빨리 메시지가 전달되는 여러 프로세스로 이동합니다.

그러나 일반적으로 메시지 전달 접근 방식은 더 깨끗합니다. 쉽게 수정합니다 버전.

그리고 Erlang, Node.js, Clojure, Go.

이 중 Clojure가 아마도 가장 유익한 것일 것입니다. Clojure가 어떻게 진드하는지 이해하고 WHOYS, 다른 시스템의 전체 목표와 제약이 제자리에 떨어질 것입니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top