ROS AsyncSpinner 분석

OpenJR·2022년 12월 18일
0

AsyncSpinner

AsyncSpinner에 대한 제대로 설명이 없어서 기록으로 남긴다. 가장 기본적은 설명은 다른 글들에서도 넘쳐나니 간략하게만 기능을 설명하면, Subscribe 콜백 함수를 호출하는 스레드를 따로 분리하여 사용할 수 있다.

1. MultiThreadedSpinner와는 어떤 차이가 있나요?

MultiThreadedSpinnerros::spin()과 동일한 blocking spinner입니다.
blocking의 의미는 여러 스레드에서 공유 자원에 접근 시, 한 스레드만 접근할 수 있다는 의미 입니다. 공유자원을 안정적으로 관리 할 순 있지만, 그로 인해서 성능 저하가 발생합니다.
AsyncSpinner는 non-blocking spinner로 위의 단점을 상쇄합니다. 그래서 이름이 비동기적 스피너라고 합니다.

또한, AsyncSpinnerMultiThreadedSpinner와 다르게 콜백함수의 시작과 멈춤을 start(), stop()함수로 조절이 가능합니다.
하지만, MultiThreadedSpinner는 이러한 기능이 없습니다. ros::spin()도 이러한 기능이 없기에 둘이 유사하다고 합니다.

2. CPU의 스레드 숫자보다 많은 스레드를 할당한다면?

CPU 최대 스레드만 할당이 되어 동작하게 됩니다.

3. 콜백함수의 숫자보다 적은 스레드를 할당한다면?

적은 스레드 만큼만 할당 되어 동작하게 됩니다. 즉, 한 스레드에 다수의 콜백함수가 쓰입니다.

4. 콜백함수의 숫자보다 많은 스레드를 할당한다면?

할당은 되지만 사용되지는 않습니다.

5. 공유자원이 사용되지 않는다면 MultiThreadedSpinnerAsyncSpinner와 동일하나요?

Blocking을 하지 않는다는 관점 하나만 동일합니다.

profile
Jacob

0개의 댓글