[ ÆÄÀ̽ã ] ¸ÖƼ¾²·¹µå ¹®ÀÇ

   Á¶È¸ 2613   Ãßõ 0    

파이썬(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의 투명성 …


감사합니다

ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
chis 2021-09
Á¦°¡ ½Ç·ÂÀÌ ¹ÌõÇÏ¿© ´äº¯À» ´Ù µå¸®Áö´Â ¸øÇÕ´Ï´Ù¸¸
ÀÏ´Ü threading¸ðµâ·Î´Â 1°³Äھ ½Ã°£ºÐÇÒ·Î µ¿½ÃÀÛ¾÷ÇϰԵǴ°Űí
¸ÖƼÄھ È°¿ëÇÏ·Á¸é multiprocessing¸ðµâÀ» ÀÌ¿ëÇÏ½Ã¸é µË´Ï´Ù.
1. ÀÚ¼¼È÷ ¼³¸íÇϸé python context¸¸ 1°³ÀÇ ¾²·¹µå°¡ µ½´Ï´Ù. ¿©ÀüÈ÷ Àüü process·Î ºÃÀ»¶§´Â ¸ÖƼ¾²·¹µùÀÔ´Ï´Ù.
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Àº ¶¿·¹¾ß ¶¿¼ö ¾ø´Â °ü°èÀÔ´Ï´Ù. py2->3À¸·Î ³Ñ¾î°¥¶§ GIL¿¡ ´ëÇؼ­ ¾öû³­ ³íÀÇ°¡ ÀÌ·ï ’°í, ±× ³¡¿¡ GILÀ» À¯ÁöÇÏ´Â °ÍÀ¸·Î °á·ÐÀÌ ³µ½À´Ï´Ù.
¸ðµç python ÄÚµùÀº ÀÌÁ¦ GILÀ» »ç¿ëÇÔÀ¸·Î ¾ò´Â ÀÌÁ¡À» ÃÖ´ëÇÑ ´©¸®°í, GILÀÇ ¹®Á¦Á¡Àº gil optimization, multiprocess, asyncio, pybind µîÀÇ ¹æ¹ýÀ¸·Î Ç®¾î³ª°¡´Â°Ô ¸Â½À´Ï´Ù.
GILÀ» ¾ø¾Ö°Å³ª ÇÇÇÏ·Á´Â ½Ãµµ´Â ÇÏÁö ¸¶¼¼¿ä. µ¿½Ã¼ºÀ» ¿øÇϽŴٸé, ¾Æ¿¹ ´Ù¸¥ ¾ð¾î¸¦ ¾²´Â°Ô ³´½À´Ï´Ù.
´äº¯ ÁÖ½ÅºÐµé °¨»çÇÕ´Ï´Ù. ²Ù¹÷
È­¶õ 2021-09
Á¶±Ý ´Ù¸¥ ¾ê±âÁö¸¸

C/C++ À̶ó¸é OpenMP ÇÔ¼ö ¸îÁÙÀ» ¼Ò½ºÄڵ忡 ¹ß¶ó ÁÜÀ¸·Î½á ¸ÖƼ¾²·¹µå µ¿ÀÛÇÕ´Ï´Ù.

¾ÆÁÖ ½¬¿ö¿ä.

½Ì±ÛÄÚ¾î·Î § ¼Ò½º¿¡ Çì´õ¸¸ »ç¾Ë¦~ Ãß°¡ÇÏ¹È µÇ°Åµç¿ä.


´Ü, Á¤±³ÇÑ ¸ÖƼ¾²·¹µåÇÏ·Á¸é ´ç±ÙÀ¸·Î pthread_xxxx() ¹¹ ÀÌ·± ÇÔ¼ö·Î ³¯ÄÚµù(?) ÇؾßÁÒ^^


QnA
Á¦¸ñPage 655/5686
2014-05   4975404   Á¤ÀºÁØ1
2015-12   1511582   ¹é¸Þ°¡
2010-03   9883   ½ÂÈĴϵµÄì
2003-08   9883   ±èÀÏȯ
2019-11   9883   Æ۽̱Û
2003-11   9883   ¹ÚÁ¤¼ø
2003-12   9883   ¿À»óÈÆ
2009-09   9883   ºí·ç¸ð¼Ç
2013-06   9882   kiolol
2014-07   9882   ¶ó¿ÂÁ¦³ª
2013-07   9882   ¸Å¾²TM
2011-06   9882   ½ºÄ«ÀÌ
2003-04   9881   À±¿µ¼±
2012-02   9881   ¿ÀÁØÈ£5
2011-04   9880   ´ÜÃ߾ƺü
2003-11   9880   À̵¿ÀÍ
2015-03   9880   ÀÕÈþÀÕÈþ
2009-06   9880   Á¤ÀçÈÆ
2011-01   9880   Á¶¸í¼ö
2003-11   9880   ÀÌ´ë·Î
2003-08   9879   ¹Ú±ÔÇö
2013-09   9879   »ßµ¹À̽½ÇÄÀÌ