AsyncSpinner에 대한 제대로 설명이 없어서 기록으로 남긴다. 가장 기본적은 설명은 다른 글들에서도 넘쳐나니 간략하게만 기능을 설명하면, Subscribe 콜백 함수를 호출하는 스레드를 따로 분리하여 사용할 수 있다.
MultiThreadedSpinner
와는 어떤 차이가 있나요?MultiThreadedSpinner
는 ros::spin()
과 동일한 blocking spinner입니다.
blocking의 의미는 여러 스레드에서 공유 자원에 접근 시, 한 스레드만 접근할 수 있다는 의미 입니다. 공유자원을 안정적으로 관리 할 순 있지만, 그로 인해서 성능 저하가 발생합니다.
AsyncSpinner
는 non-blocking spinner로 위의 단점을 상쇄합니다. 그래서 이름이 비동기적 스피너라고 합니다.
또한, AsyncSpinner
는 MultiThreadedSpinner
와 다르게 콜백함수의 시작과 멈춤을 start()
, stop()
함수로 조절이 가능합니다.
하지만, MultiThreadedSpinner
는 이러한 기능이 없습니다. ros::spin()
도 이러한 기능이 없기에 둘이 유사하다고 합니다.
CPU 최대 스레드만 할당이 되어 동작하게 됩니다.
적은 스레드 만큼만 할당 되어 동작하게 됩니다. 즉, 한 스레드에 다수의 콜백함수가 쓰입니다.
할당은 되지만 사용되지는 않습니다.
MultiThreadedSpinner
는 AsyncSpinner
와 동일하나요?Blocking을 하지 않는다는 관점 하나만 동일합니다.