파이썬(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의 투명성 …
감사합니다
ÀÏ´Ü threading¸ðµâ·Î´Â 1°³Äھ ½Ã°£ºÐÇÒ·Î µ¿½ÃÀÛ¾÷ÇϰԵǴ°Űí
¸ÖƼÄھ È°¿ëÇÏ·Á¸é multiprocessing¸ðµâÀ» ÀÌ¿ëÇÏ½Ã¸é µË´Ï´Ù.
PyGILState_Ensure, PyGILState_ReleaseÀÌ GIL mutex ÀÔ´Ï´Ù. ÀÌ°É·Î º¸È£µÈ ÄÚµå´Â python interpreter/object¿Í ¿¬°üµÈ ÄÚµåÀÔ´Ï´Ù.
³ª¸ÓÁö contextµé, ¿¹¸¦µé¸é c++ Äڵ峪 io ÄÚµå´Â ¿©ÀüÈ÷ ¸ÖƼ¾²·¹µùÀÌ Çã¿ëµË´Ï´Ù.
ÀÌ´Â python Äڵ带 Â¥±â ½±°Ô ÇÏ°í ¾ÈÁ¤¼ºÀ» À§ÇÑ°ÍÀÔ´Ï´Ù.
½Ì±Û CPU/Core(´ÜÀÏ ÄÚ¾î CPU)¿¡¼ ¸ÖƼ¾²·¹µå(ÄÚµå)´Â preemptive ½ºÄÉÁ층¿¡ °ü·ÃÇÑ °Çµ¥, ÀÌ´Â ÀÚ¿ø °øÀ¯°¡ ¸ñÀûÀÔ´Ï´Ù.
µû¶ó¼ µÎ°³´Â ¸ñÀûÀÌ ´Ù¸¨´Ï´Ù.
2+3. CpythonÀÌ ¾Æ´Ñ ´Ù¸¥ ±¸Çöü´Â GILÀÌ ¾øÀ» ¼ö ÀÖ½À´Ï´Ù. GILÀ» ¾ø¾Ö±â À§ÇÑ ±¸Çöüµµ ÀÖ¾ú½À´Ï´Ù¸¸, ±× Áß¿¡¼ ¼º°øÇÑ°Ç ¾ø½À´Ï´Ù.
mutex lockÀ» ÇÇÇϱâ À§Çؼ´Â ´Ù¸¥ ±¸Çöü·Î ÇØ°áÇÏÁö ¾Ê°í, multi processing ¶óÀ̺귯¸®³ª c++ÄÚµå¾È¿¡¼ ¾²·¹µå¸¦ °ü¸®ÇÏ´Â ½ÄÀ¸·Î ÇØ°áÇÕ´Ï´Ù.
CPythonÀÌ ¾Æ´Ñ ´Ù¸¥ ±¸Çöü(Jython, IronPython)ÀÇ ÆÄÀ̽ãÀ» ¾²¸é, ÀϹÝÀûÀÎ ¸ÖƼ¾²·¹µå on ¸ÖƼ CPU Core/Thread¿¡¼ÀÇ ÀåÁ¡°ú µ¿ÀÛÀ» °¡Áú ¼ö ÀÖ´ÂÁö ±Ã±Ý ÇÕ´Ï´Ù.
¾Æ´Ï¿ä, º¸Åë ´Ù¸¥ ±¸Çöü¸¦ ¾²´Â ¸ñÀûÀº GILÀ» ¾ø¾Ö´Â ¸ñÀûÀÌ ¾Æ´Õ´Ï´Ù.
=> ¼öÁ¤. GILÀÌ ¾ø´Â ´Ù¸¥ ±¸Çöü¸¦ ¾²¸é °¡´ÉÇÒ¼öµµ ÀÖ½À´Ï´Ù. ´Ù¸¸, º¸Åë ´Ù¸¥ ±¸Çöü¸¦ ¾²´Â ¸ñÀûÀº GILÀ» ¾ø¾Ö´Â ¸ñÀûÀÌ ¾Æ´Õ´Ï´Ù.
Pypy, Cythonµî ´Ù¸¥ ±¸Çöü¸¦ »ç¿ëÇصµ, °¡Á¸ Cpython¿¡¼ »ç¿ëÇÑ ÆÄÀ̽ã Äڵ带 ±×´ë·Î »ç¿ëÀÌ °¡´É ÇÏ°ÚÁö¿ä ?
¾î´ÀÁ¤µµ º¹ÀâÇÑ ÄÚµå´Â ´ëºÎºÐ ºÒ°¡´ÉÇÕ´Ï´Ù. dialect ȤÀº library¿¡ µðÆæ´ø½Ã°¡ ¾ø´Â ÄÚµå´Â Á¤¸» µå¹´´Ï´Ù.
4. cpythonÀº gdb·Î µð¹ö±ë °¡´ÉÇÕ´Ï´Ù.
5. ht/smt¸¦ awareÇؼ º¸Åë ÆÄÀ̼± Äڵ带 Â¥Áø ¾Ê½À´Ï´Ù. os°¡ awareÇؼ ½ºÄÉÁ층À» Çϰųª, ±»ÀÌ ¿øÇÑ´Ù¸é py code¾È¿¡¼ ¹ÙÀεùÀ» ÇÒ¼ø ÀÖ½À´Ï´Ù.
¸ðµç python ÄÚµùÀº ÀÌÁ¦ GILÀ» »ç¿ëÇÔÀ¸·Î ¾ò´Â ÀÌÁ¡À» ÃÖ´ëÇÑ ´©¸®°í, GILÀÇ ¹®Á¦Á¡Àº gil optimization, multiprocess, asyncio, pybind µîÀÇ ¹æ¹ýÀ¸·Î Ç®¾î³ª°¡´Â°Ô ¸Â½À´Ï´Ù.
GILÀ» ¾ø¾Ö°Å³ª ÇÇÇÏ·Á´Â ½Ãµµ´Â ÇÏÁö ¸¶¼¼¿ä. µ¿½Ã¼ºÀ» ¿øÇϽŴٸé, ¾Æ¿¹ ´Ù¸¥ ¾ð¾î¸¦ ¾²´Â°Ô ³´½À´Ï´Ù.
C/C++ À̶ó¸é OpenMP ÇÔ¼ö ¸îÁÙÀ» ¼Ò½ºÄڵ忡 ¹ß¶ó ÁÜÀ¸·Î½á ¸ÖƼ¾²·¹µå µ¿ÀÛÇÕ´Ï´Ù.
¾ÆÁÖ ½¬¿ö¿ä.
½Ì±ÛÄÚ¾î·Î § ¼Ò½º¿¡ Çì´õ¸¸ »ç¾Ë¦~ Ãß°¡ÇÏ¹È µÇ°Åµç¿ä.
´Ü, Á¤±³ÇÑ ¸ÖƼ¾²·¹µåÇÏ·Á¸é ´ç±ÙÀ¸·Î pthread_xxxx() ¹¹ ÀÌ·± ÇÔ¼ö·Î ³¯ÄÚµù(?) ÇؾßÁÒ^^