【C#開発ノート-#1】メキキバイト-内部実装+マルチスレッドのデバッグ方法
メキキバイトソフトウェア開発チーフの和田悟です。
私、入社前に、プロダクトの開発環境や技術レベルは、知っておきたい派です。
弊社は様々なプロダクトがありますが、私はメキキバイトを作っています。
c#の知見高めたい・フツパーの技術が知りたい方は是非お読みくださいませ。
メキキバイトとは?
メキキバイトとは、外観検査のプロダクトです。機能は、以下のことが出来ます。
ベルトコンベア上などに流れる製品に不良があったら排除(空気圧やフリッパー)
AI作成のための画像収集&SaaS(Hutzper Insight)にアップロード
検査画像をSaaS(Hutzper Insight)に送信
SaaS上で統計データを確認出来る。
メキキバイトの詳細はコチラ
メキキバイトのソフトウェアの内部実装
ざっくり、以下のようになっています。
c# .net6.0 (近日に8.0にする予定)
メキキバイトのソフトウェア1つで、全ての案件を柔軟にこなせます。(例外アリ)
例)カメラ1台・IOデバイス1台
例)ラインカメラ2台(裏表用)・照明1台・IOデバイス1台
例)カメラ6台(裏+上+横4面)・照明2台・IOデバイス1台
などなど...
いろいろなデバイスに対応
数種類の産業用カメラメーカ対応と台数
数種類のデジタルIOデバイス
数種類の照明デバイス
AIモデル
弊社作成のSaaSで作った数種類のAIモデルに対応
エラー対策
様々な問題の捕捉と対策
問題が起きたら社内slackに通知
0から全てスクラッチでコードを書いています。全て内製コードです。(パッケージは多用。)
コンピューターサイエンス
CPU使用率を下げれるだけ下げています
マルチスレッドで良く起きる問題と対策
マルチスレッドのデバッグ方法
たくさんのスレッドを制御していると、ある地点において、各スレッドがいまどうなっているか確認したいことがあります。そういった際にTracyを使うと、楽に確認が出来ます。
以下は、メキキバイトアプリケーションを動かしながら、tracyで確認している様子です。
Tracy上に表示させるには以下のコードを埋め込むことで計測が可能になります
using (Profiler.BeginEvent("TaskInference.Execute"))
{
/* 何かしらの処理 */
/* このように書くとTracy上で計測可能になる */
}
github:
デモサイト:https://tracy.nereid.pl
次回
スレッドを上手に使うために、たくさんの制御方法があります。
参照 System.Threading や System.Collections.Generic など。
弊社でよく使っているのは以下です。(多用しすぎても理解大変なので一部だけ使うようにしています)
ManualResetEvent
Lock
InterLock
ConcurrentDictionary
ConcurrentQueue
基本的にロックフリーなコンテナやアトミック演算でなんとかして、なるべくロックしないような作りを目指しています。この辺り、メキキバイトでは実際にどうつかっているのか書きます。
次回以降も技術記事書いていくので、気になる方はフォローよろしくお願いします。