루틴과 서브루틴.

HJ seo·2022년 10월 24일
1

study

목록 보기
5/5

공부 내용.

한참 헤매면서 구글링을 하며 글을 읽다가 4번째 Refernce의 글을 읽으며 공부를 어떻게 하면 좋을지, 그리고 글을 어떻게 쓰면 좋을지에 대한 구상이 끝나게 되었다. 잘 정리해보자.


기본으로 돌아가서..

Routine이란?

루틴은 아마도 운동을 좋아하는 사람들이 잘 아는 단어이지 싶다. 운동할 때 규칙적으로 하는 일과라고 알고 있었는데 간단히 검색을 해보니 이런 뜻이더라..

  • (정보·통신) 특정한 작업을 실행하기 위한 일련의 명령. 프로그램의 일부 혹은 전부를 이르는 경우에 쓴다.

즉, 단순하게 xx.py 파일을 만들어놓고, 거기에 함수든 for문이든 명령을 수행하는 무언가를 써놓고 xx.py를 실행시키는 것, 혹은 그 파일 자체를 루틴이라 할 수 있을 것이다.


그렇다면..

Subroutine이란 무엇일까?

메인루틴(정의하지는 않았지만 그냥 루틴이다.)에서 호출시 실행되는 함수라 말할 수 있다. 예시를 하나 들어서 설명해보자. 실행하는 각각의 함수명에는 무엇을 의미하는지 적어놓았다.

def Subroutine():
	print("Run Subroutine & result = 1")
	return 1
    
def Mainroutine():
	print("Run Mainroutine")
	Subroutine_result = Subroutine()
    
    Subroutine_result += 5
    print("Mainroutine end")
    return Subroutine_result

print(Mainroutine())

그리고 이 코드가 작동한 결과를 살펴보면

Run Mainroutine
Run Subroutine & result = 1
Mainroutine end
6

이라는 결과가 나온다. 그리고 이 구조는 스택의 과정과 완전히 일치한다는 것이고, 따라서 서브루틴의 실행과정은 스택의 변화와 동일하다고 말할 수 있다.
(0: Mainroutine함수 실행 --> 1: Subroutine함수 실행 및 종료 --> 0: Mainroutine함수 종료)


마지막으로..

Coroutine은 무엇일까?

접미사 Co-의 의미를 대강 생각해보자. '함께'라는 뜻이 있을텐데 각각의 함수가 서로의 작업을 하는 것을 생각해보면 하나의 스레드를 나눠서 함수를 쓴다는 것이라 해석하면 될 것이다.(그러니까 인생은 혼자란건가?)
이에 대한 자세한 설명은 스레드와 같이 할 필요가 있어보인다. 이게 왜 필요한지 그 필요성에 대한 것이 꽤 중요한 내용이어 보이기에 다음 글에서 자세하게 소개해볼 예정이다.

Reference.

  1. 서브루틴 정의 - 정보통신용어사전
  2. 자바를 이용한 프로그래밍 입문 제2장 제3절 문자열, 클래스, 객체 및 서브루틴 - wikidocs
  3. asyncio 뽀개기 1. Coroutine과 Eventloop - Isac Yoo
  4. Coroutine과 Subroutine의 차이 - 코루틴이란 무슨 뜻일까 - Kotlin world
  5. Coroutine은 어떻게 작업을 최적화하는가? - Kotlin world

discordbot 상황.

공부를 해본 결과 코루틴과 asyncio를 완전 잘못 이해한 체로 코드를 짜고 있었다..
asyncio를 통해 코루틴을 사용할 때는 create_task를 사용해야 코루틴이 정상 작동한다고 한다. 결과적으로 asyncio.sleep을 생으로 가져다박으면 (물론 작동은 하지만) Thread를 사용하는 것과 별다른 차이가 없게 된다.
우선 기본알람의 코드구조를 좀 바꿔놓았고, 이거는 Coroutine의 작동원리와 같이 잘 돌아갈 것이다. 문제는 반복알람인데... 충분히 쪼개도 복잡한게 참 큰 문제다...ㅋㅋㅋ...

profile
다양한 분야에 관심이 많은 초보 개발자 입니다.

1개의 댓글

comment-user-thumbnail
2023년 12월 18일

오 디스코드봇 짜시면서 작성하셨구나.. 전 요즘 디스코드봇 살짝손대다 그냥 이론 다시 적립하고 나중에 만드려고하는데ㅋㅋ

답글 달기