2016-06-23 2 views
-1

ラズベリーパイと温度変化の監視を目的としたセンサーを使ったIoT実験を行っています。各ラズベリーパイは複数のセンサーに接続されています。私の目標は、毎秒センサーを1つ読み取ってバッファー(実バッファーまたはcsvファイル)に保管し、データをブローカーに公開することです。プログラムは現在キュー内のすべてのことをやっています。いくらかの遅れが出てくる。私はテストして、それは遅れが読書プロセスから来ることが判明。読み込み遅延を減らす方法はありますか?マルチスレッドでこの問題を解決できますか?もしそうなら、私は3スレッドを作成すると思います。センサスレッドはデータを読み出し、バッファに格納します。 Communicatorスレッドはブローカに接続し、バッファ内のデータを読み取り、ブローカに送信します。メインスレッドはセンサースレッドとコミュニケータスレッドを管理します。このようにプログラムをリファクタリングすると、各センサーごとに1つのセンサースレッドを作成するのか、すべてのセンサーに対して1つのセンサースレッドを作成するのですか?センサー付きラズベリーパイのマルチスレッドプログラムのリファクタリング

ご意見をいただければ幸いです。

+4

Piは1ダースのセンサーを持っていても、1秒に1回、すべてのセンサーの読み取りを何ら問題なく処理できなければなりません。スレッドを使用すると、問題を過剰に設計するように聞こえます。最初に、センサーからの読み取りまたはデータの書き込みから遅延が発生しているかどうかを確認してから、問題を最初に解決してください。 – JvO

+0

遅延の発生場所を確認するにはどうすればよいですか?現在、すべてのセンサーが1つのブレッドボード上にありますが、遅延を引き起こす可能性もありますか? – Tian

答えて

0

アプリケーションを再設計する前に、ボトルネックがどこにあるかを絞り込む必要があります。これを診断するには、メモリから読み込んだ各文字列の先頭と最後を、メモリに保存した文字列バッファに記録してみます。これを30秒程度行ってください。その後、センサーからの読み取りを停止し、バッファーをログファイルに書き込みます。ログファイルに各センサー読み取りの開始と終了の間の遅延が表示される場合は、その場所でボトルネックが発生します。もしそうでなければ、おそらくボトルネックはあなたのCSVファイルをディスクに書き続けることにあります。

+0

あなたのお返事ありがとうございます。私はあなたの指示に従っており、遅れが読書部から来ていることを確認しました。遅れは時間の経過とともに一様に分布していないので、ハードウェアの問題ではなくソフトウェアの問題だと思います。この問題を解決する方法はありますか? – Tian

+0

この場合、別々のスレッドで読み取りを実行することは実行可能な解決策である可能性があります。私はセンサーごとに1つのスレッドを使用し、それぞれが読み取りを実行し、共通のバッファーにデータをダンプします。あなたは、バッファへの読み書きが同期されていることを確認する必要があります。 –

関連する問題