본문 바로가기

[패스트캠퍼스 11월 환급 챌린지]

패스트캠퍼스 환급챌린지 8일차 : Executor & callback group

[ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ]

https://fastcampus.info/4oKQD6b

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

 

 


https://fastcampus.co.kr/data_online_selfdriving

 

자율주행 로봇을 위한 ROS 2 & SLAM & Nav2 한번에 끝내기 | 패스트캠퍼스

로봇 입문 시작점 ROS 2부터 자율주행 로봇을 위한 SLAM & Navigation2 와 시뮬레이터를 활용한 자율주행 로봇 실습까지 한번에

fastcampus.co.kr

본 글은 위 강의를 참고하여 작성되었습니다

 

 

 

[강의시작 | 강의종료]

[완강 인증]

 

[학습 내용]

 

[강의 후기]

 

Executor와 callback group에 대한 개념과 학습 이유에 대해 공부했습니다.

 

 

-Executor-

: 노드의 callback을 실행하는 메인 루프 역할을 수행합니다(노드의 모든 callback을 실행하고 스케쥴링). 

 

 

-callback-

: 특정 이벤트가 발생했을 때 실행되도록 미리 정해놓은 함수. 

  • 함수가 직접 호출되지 않고, 어떤 조건이 만족될 때 시스템이나 프레임워크에 의해 자동으로 호출
  • subscriber callback, timer callback, service callback 등과 같은 작업 단위

노드에서 발생하는 여러 이벤트를 순차적/병렬로 처리하여 활용 최적화

 

 

-Executor 종류-

single-threaded executor와 multi-threaded executor가 있습니다.

 

<single-threaded executor>

  • 단일 스레드에서 모든 콜백을 순차적으로 처리합니다
  • 단순하고 예측 가능한 실행 방식을 가지고 있습니다.
  • 간단한 노드에 적합합니다.
  • 긴 시간동안 실행되는 콜백이 존재하면, 다른 콜백의 처리가 지연될 수 있습니다.

<multi-threaded executor>

  • 여러 스레드를 사용하여 병렬로 처리합니다.
  • 높은 처리량이 필요한 경우 유용합니다.
  • 복잡한 시스템에서 성능이 향상됩니다.
  • 스레드 간 충돌이나 경쟁 상태가 발생할 수 있어, 올바른 메커니즘이 필요합니다.

 

 

-callback group-

: 콜백들의 실행 방식을 관리하고 제어하는 메커니즘입니다.

  • 실행 방식을 세분화하여 executor가 보다 효과적으로 콜백을 관리할 수 있도록 돕는 기능입니다. 
  • 콜백의 실행 순서와 동시성을 관리하며, 다중 스레드 환경에서 안정적으로 노드를 운영합니다.

 

 

-callback group 종류-

reentrant callback group, mutually exclusive callback group이 있습니다.

 

<reentrant callback group>

  • 이 그룹으로 묶인 모든 콜백을 동시에 실행시킵니다.
  • 주기적인 센서 데이터 처리나 비동기 처리에 효율적입니다.

<mutually exclusive callback group>

  • 이 그룹으로 묶인 콜백이 동시에 실행되지 않도록 관리합니다.
  • 그룹으로 묶인 콜백들은 한 번에 하나의 콜백만 실행됩니다.
  • 특정 리소스를 보호하거나, 일부 작업이 연속적으로 실행되기를 원할 경우에 사용합니다.
  • 데이터의 무결성을 보장해야하는 경우, 예기치 않은 동시 접근에 의한 충돌을 방지할 때 사용합니다.

 

 

-생각해볼 점-

이번 강의에서는 callback 함수를 실행하고 관리하는 executor, callback 함수들의 실행 방식을 관리하고 제어하는 callback group의 개념에 대해 공부했습니다. 이에 대한 구현 방법과 실습은 다음 강의에서 다룰 예정입니다. 이전 글에서 다뤘던 'while 루프문으로 인해 다른 callback 함수들이 제대로 호출되지 않는 문제'는 callback group중, reentrant callback group을 사용해 해결 할 수 있겠습니다. 그 이유는 reentrant callback group으로 묶인 콜백들은 동시에 실행되는데, while 루프문으로 다른 callback 함수들이 호출되지 않는 문제를 해결 할 수 있기 때문입니다. 이와 별개로 동시에 실행되면 안되는 callback 함수들이 호출되는 문제에선 mutually exclusive callback group을 사용하면 되겠습니다. 묶인 callback 함수들을 상호 배타적으로 관리하기 때문에, callback 함수들이 충돌하지 않고 무결성이 보장되기 때문입니다. 개인 프로젝트를 진행하다보면 모터, 카메라, 라이다, 초음파 등등 여러가지 센서를 연결해 사용하게 됩니다. 이때 동시에 실행되어도 오류가 없는 센서들도 있을 것이고, 서로 충돌하는 센서들도 있을 것입니다. 여러가지 센서를 비교적 손쉽게 정리하고 관리하기위해 이번 강의에서 배운 executor와 callback group을 이해하고, 스스로 사용할 수 있도록 반복 숙달하겠습니다.