문제

누군가 알고있는 운명의 글로벌 통역 잠금에서는 파이썬 3.1 에 대하여 C++멀티 스레드 통합

도움이 되었습니까?

해결책

길은 아직 거기에서 CPython3.1;이 Unladen 삼키 프로젝트는 것을 목표로(다른 많은 성능을 향상)을 결국 그것을 제거하지만,그것은 여전히 방법으로서,목표를 위해 노력하고 있습니다 2.6 처음으로 의도는 결국 이식 3.x 어떤 x 것이 현재에 의해 시간을 2.y 버전으로 간주됩니다.지금은,다중 프로세싱(대신 threading)남아 있는 방법에 대한 선택의를 사용하여 여러 개의 코어에서 CPython(서식 파일은 새 및 Jython 은 괜찮지만,그들은 지원하지 않는 파이썬 3 현재도 아니요,그들이 만드는 C++를 통합을 모든 것을 쉽게 중;-).

다른 팁

Python 3.2의 Gil에서 중요한 변화가 발생합니다. 살펴보십시오 Python 3.2의 새로운 기능, 그리고 메일 링리스트에서 시작한 스레드.

변화는 길의 끝을 의미하지 않지만, 잠재적으로 거대한 성능 이익을 예고합니다.

업데이트 0

  • Antoine Pitrou의 3.2에서 새로운 GIL의 일반적인 성과 이익은 무시할 수 있었고 대신에 중점을 두었습니다. 경합 문제 개선 그것은 특정 코너 케이스에서 발생합니다.
  • an 훌륭한 노력 David Beazley는 CPU 및 IO 바운드 스레드가 혼합 될 때 성능을 크게 향상시키기 위해 스케줄러를 구현하도록 만들어졌습니다.
  • 무단 삼키는 일이있었습니다 병합을 위해 제안되었습니다 Python 3.3에서는 해당 프로젝트의 결과가 부족하여 철회되었습니다. pypy 현재 선호하는 프로젝트이며 현재입니다 자금 요청 Python3K 지원을 추가합니다. Pypy가 현재 기본값이 될 가능성은 거의 없습니다.

지난 15 년 동안 Cpython에서 길을 제거하기위한 노력이 이루어졌지만 가까운 미래에는 여기에 머물러 있습니다.

길은 파이썬 객체를 사용하지 않는 코드에 영향을 미치지 않습니다. Numpy에서는 계산 코드 (선형 대수 호출 등)를위한 Gil을 릴리스하고, 기본 코드는 멀티 스레딩을 자유롭게 사용할 수 있습니다 (실제로는 일반적으로 Python에 대해 전혀 모르는 제 3 자 라이브러리입니다).

길은 좋은 일입니다.

C ++ 애플리케이션이 멀티 스레드 작업을하는 동안 길을 릴리스하십시오. Python 코드는 다른 스레드에서 계속 실행됩니다. 파이썬 객체를 터치해야 할 때만 길을 구하십시오.

항상 길이있을 것 같아요. 그 이유는 성능입니다. 모든 낮은 수준의 액세스 스레드를 안전하게 만드는 것은 각 해시 작동 등에 뮤트를 넣는 것이 무겁습니다. 간단한 진술과 같은 것을 기억하십시오

self.foo(self.bar, 3, val)

현재 3 개 이상 (Val이 글로벌 인 경우)은 현재 해시 가능한 조회를 가질 수 있으며 메소드 캐시가 뜨겁지 않은 경우 (클래스의 상속 깊이에 따라) 훨씬 더 많을 수도 있습니다.

비싸다. 그래서 Java가 아이디어를 떨어 뜨리고 모니터 호출을 사용하지 않는 "Java는 느린 느린"상표를 제거하지 않는 해시블을 소개했다.

내가 이해할 수 있듯이 "Brainfuck"스케줄러는 Python 3.2에서 Gil을 대체합니다.

BFS Bainfuck 스케줄러

길이 방해가되면 다중 프로세싱 기준 치수. 새로운 프로세스를 생성하지만 스레딩 모델과 대부분의 API를 사용합니다. 다시 말해, 스레드와 같은 방식으로 프로세스 기반 병렬 처리를 수행 할 수 있습니다.

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