파이썬 yield에 대해서 부가적으로 써보겠습니다.
왜 yield를 사용하느냐,,,
이것을 왜 코루틴으로 사용하는가..?
대한 답입니다.
함수는 기본적으로 실행이 종료 되면, 그 안의 모든 로컬 변수들은 날라가 버립니다.
함수라는 것 자체가 기본적으로 휘발성이기때문에, 날라가 버리죠,,
그래서 날라가는 것을 방지하기 위해서 global로 선언을 해버립니다.
교과서에서는 global로 선언하는 것은 후진 방법이라고 써져있습니만,
실제로은 후진방법은 아닙니다. 다만, 그 사이드 이펙트가 컨트롤 할 수 없을 정도로 복잡해지기에,
쓰지말라고 하는것이죠,,
실제로는 많이들 사용합니다. 왜냐하면 중앙 변수를 건드리는게 편하니깐요,
yield는 그럼 무엇일까요,,
기본적으로 함수이지만, 휘발성이 없는 함수입니다.
실행이 끝난다고 , 날라가 버리지 않지요,,
global하게 살아 있는 함수인것입니다.
함수 실행중에 잠시 세워놓고 딴짓거리를 해도 변수나 이런게 다 살아 있습니다.
이게 무엇을 얘기하느냐,, 멀티프로세싱의 기본이 되는것이죠,,
일종의 thread입니다.
다만, 실제로 real time multi-thread가 아니라,
turn 방식의 thread,
게임으로 말하면 스타크래프트 같은것이 실시간으로 다른 task들을 처리하는 반면에
삼국지,HMM 스타일은 실시간으로 처리를 하지 않고, 턴 방식으로 처리를 합니다.
서로 간의 장단점이 있습니다만,
턴방식의 장점은, 그리 많은 프로세서 파워를 요구하지 않죠,,
이것도 yield에서도 마찬가지 입니다.
다양한 멀티 작업들을 돌릴때, 한번에 하나씩 돌리면서, synchronous하게 움직이죠,,
그러면서 , 실시간 처리하면서 생기는 asynchronous의 문제들이 사라집니다.
좀더 세밀하게 컨트롤 할 수도 있고요,,,
이것이 yield의 장점입니다.
활용처는 이 기본적인 차이를 알고 계시면 충분히 활용은 쉬우리라 봅니다.
좋은 설명 감사합니다!
답글삭제