2016-06-23 3 views
-1

라즈베리 피 (laspberry pis)와 온도 변화 모니터링을 목표로 한 센서로 IoT 실험을하고 있습니다. 각각의 나무 딸기 파이는 여러 센서에 연결됩니다. 제 목표는 초당 센서 당 하나의 판독 값을 가지고 버퍼 (실제 버퍼 또는 CSV 파일)에 데이터를 저장하고 브로커에 데이터를 게시하는 것입니다. 이제 프로그램이 모든 것을 큐에서 처리하고 있습니다. 그것은 약간의 지연을 낳는다. 나는 테스트를 거쳤으며, 지연은 읽기 프로세스에서 비롯된 것으로 밝혀졌습니다. 독서 지연을 줄일 수있는 방법이 있습니까? 멀티 스레딩으로이 문제가 해결됩니까? 그렇다면, 내가 생각하기에 3 개의 스레드를 만드는 것입니다. 센서 스레드가 데이터를 읽고 버퍼에 저장합니다. Communicator 스레드가 브로커에 연결하고 버퍼의 데이터를 읽고 브로커에 보냅니다. 메인 스레드는 센서 스레드와 커뮤니케이터 스레드를 관리합니다. 이 방법으로 프로그램을 리팩토링하면 각 센서에 대해 하나의 센서 스레드를 쓰거나 모든 센서에 대해 하나의 센서 스레드를 작성합니까?센서가있는 라즈베리 파이의 멀티 스레드 프로그램 리펙토링

모든 의견을 크게 기뻐할 것입니다.

+4

Pi는 12 개의 센서가 있어도 문제없이 초당 한 번씩 모든 센서를 한 번 읽을 수 있어야합니다. 스레드를 사용하면 문제가 너무 복잡해집니다. 먼저 센서에서 읽거나 데이터를 쓰는 데 지연이 있는지 확인한 다음 문제를 먼저 해결하십시오. – JvO

+0

지연이 어디서 발생했는지 어떻게 확인할 수 있습니까? 현재 모든 센서가 하나의 브레드 보드에 있습니다. 지연이 발생할 수 있습니까? – Tian

답변

0

응용 프로그램을 다시 엔지니어링하기 전에 병목 지점을 좁혀 야합니다. 이것을 진단하기 위해 센서에서 읽은 각 문자열의 시작과 끝을 메모리에 보관하는 문자열 버퍼에 기록해 봅니다. 30 초 정도 기다리십시오. 그런 다음 센서에서 읽는 것을 중지하고 버퍼를 로그 파일에 씁니다. 로그 파일에 각 센서 읽기의 시작과 끝 사이의 지연이 표시되면 병목 현상이 발생합니다. 그렇지 않으면 병목 현상이 CSV 파일을 디스크에 지속적으로 기록하는 것일 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 당신의 지시를 따랐으며, 지연은 독서대에서 나왔음을 확인했습니다. 지연은 시간이 지남에 따라 균일하게 분산되어 있지 않기 때문에 하드웨어 문제가 아니라 소프트웨어 문제라고 생각합니다. 이 문제를 해결하는 방법에 대한 제안이 있습니까? – Tian

+0

그런 경우 개별 스레드에서 읽기를 수행하는 것이 가능한 솔루션 일 수 있습니다. 나는 센서 당 하나의 스레드를 사용하고 각각이 공통 버퍼로 데이터를 읽고 덤프하도록합니다. 버퍼에 대한 읽기와 쓰기가 동기화되어 있는지 확인해야합니다. –