파이썬(cpython)은
GIL특성으로 멀티쓰레드 코딩을 해도,
다중 CPU Core/Thread 환경에서도 실제로 동시에 1개의 쓰레드(코드)만 도는 것으로 알고 있습니다.
저의 이해는 이러면, 싱글 CPU/Core/Thread(단일 코어 CPU)에서 멀티쓰레드(코드)응 구현하는 것이랑 비슷한가 아닌지요? 작업의 동시성 비스무리 호과를 가지는 장점만 누리는…
1, 저의 이해가 맞는지 궁금합니다.
2. CPython이 아닌 다른 구현체(Jython, IronPython)의 파이썬을 쓰면, 일반적인 멀티쓰레드 on 멀티 CPU Core/Thread에서의 장점과 동작을 가질 수 있는지 궁금 합니다. Pypy, Cython등 다른 구현체를 사용해도, 가존 Cpython에서 사용한 파이썬 코드를 그대로 사용이 가능 하겠지요 ?
3. 2번이 가능하다면 mutex lock 처리도 가능 할런지요 ?
4. C 바이너리 디버깅을 위한 GDB등 디버그 같은 유용한 것이 있을런지요 ?
5. 파이썬 관점에서는 CPU에서 HT/SMT의 CPU Thread도 동일한 Core로 처리되는 지요? CPU Thread의 투명성 …
감사합니다.
2. Jython, IronPython 는 이제 일반적인 상황에서는 사실상 버려진 프로젝트입니다. 그쪽에서는 쓰레드를 잘 처리할 수 있는지는 모르겠는데, 둘 다 버려진 프로젝트여서 파이썬 3을 지원하지 못합니다. 그래서 요즘 Cpython에서 동작하는 코드들을 돌리지 못합니다.
3. 정리하자면 쓰레드 대신 멀티 프로세스 기반인 multiprocessing 모듈을 쓰시는 것을 추천합니다. 파이썬 동시성 프로그래밍은 GIL문제를 해결하는 대신에 멀티프로세스로 넘어갔는데, 멀티프로세스 기반 mutex랑 semaphore 들이 있습니다.
4. CPython은 C로 만들어져 있고, 각종 모듈들이 네이티브 C에 상당히 가깝게 만들어져있습니다. 그냥 GDB돌릴 수 있어요. 파이썬 전용으로는 pbt가있고요. 디버깅 툴이 풍부한지는 그냥 IDE쓰시면 금방 나올겁니다.
5. 저는 이 분야는 모르겠지만, 파이썬은 기본적인 유닉스 OS레벨 추상화만 씁니다. 그리고 유닉스 API 에서는 기본적인 멀티쓰레드/프로세스 추상화는 HT/SMT 신경 안쓰지 않나요? 인터프리터 언어에서 HT/SMT를 고려해야할 정도의 연산을 쓰는 것도 잘 들어본 적이 없고요. scipy같은걸 쓰지 않는 이상....
상당한 수준의 로우레벨 멀티쓰레드를 원하시면 그냥 C/C++로 코딩하신 다음 파이썬 모듈에다가 붙이는 것을 추천드립니다. 텐서플로우 같이 대부분의 머신러닝 프레임워크들이 그러듯이요.