ファイル監視ツール開発日誌20210102
年末年始の時間を使って開発を進めたブラウザ上で動かすファイル監視ツールで、とりあえずファイルの中身が見えるくらいには進みました。 sftp経由でのtailも動きます。
続きを読むRustでのQuickFix実装日誌_2020/09/22
RustでQuickFixの実装を進めてまして以下のJavaでの実装のサンプルにあるBanzaiの動きをRustで書いています。 github.com
現在の進捗としてlogonを投げたあとHeartbeatを投げるところまで実装しています、 github.com
続きを読むRustでTcpStreamを書き込みと読み込みに利用する
以前RustでTcpStreamを複数スレッドで共有し、それぞれ読み込み、書き込み用に利用するためにArc<Mutex
自前でArc<Mutex
QuickFIX/Jのカスタムフィールドについて考えてみる
QuickFIX/Jのメッセージでのカスタムフィールドについて考えてみました。動作検証はQuickFIX/Jのソースのサンプルに含まれるbanzaiとexecutorを動かしています。
https://github.com/quickfix-j/quickfixj/tree/master/quickfixj-examples
まず、banzai側でNewOrderSingleのメッセージを作成して送信する部分を修正し、9000のフィールドを追加します。
https://github.com/quickfix-j/quickfixj/blob/QFJ_RELEASE_2_2_0/quickfixj-examples/banzai/src/main/java/quickfix/examples/banzai/BanzaiApplication.java#L372
public void send50(Order order) { quickfix.fix50.NewOrderSingle newOrderSingle = new quickfix.fix50.NewOrderSingle( new ClOrdID(order.getID()), sideToFIXSide(order.getSide()), new TransactTime(), typeToFIXType(order.getType())); newOrderSingle.set(new OrderQty(order.getQuantity())); newOrderSingle.set(new Symbol(order.getSymbol())); newOrderSingle.set(new HandlInst('1')); newOrderSingle.setString(9000, "CustomField"); send(populateOrder(order, newOrderSingle), order.getSessionID()); }続きを読む
Arc<Mutex<T>>でスレッド間でデータを共有する場合のDropの必要性について
前回はArc<Mutex
steavevaivai.hatenablog.com
その延長で今回はTcpStreamを複数スレッドで共有し片方のスレッドは読み込み続けて、もう片方のスレッドで書き込み続ける場合の動作を確認したのですが、際に自前でMutexGuardをDropしたほうが良さそうでした。
最初に確認した実装は以下のようになります。
続きを読むArc<Mutex<T>>でスレッド間でデータを共有してみる
スレッド間でデータを共有するときOSスレッドを直接操作するのは大変な気がしたのでグリーンスレッドがcrossbeamを試してみたのですが、改めて公式のドキュメントを見てみるとちゃんと説明がありました。
ArcとMutexの組み合わせによりスレッド間でデータを安全に共有することが出来るようです。 まずArcについてですが、ArcにはRcがありどちらも参照カウントを使ったスマートポインタであり、データや状態を共有できるとあり、つまり複数の所有者を持てることを意味し、ArcとRcの違いとしてはArcにはスレッド安全性があるようです。またRustには原則として共有しているものには書き込みができないのですが、Mutexは複数のスレッド間でデータを共有するためのスマートポインタになっていましてMutexをArcで包むことにより複数スレッド間でデータを共有して編集、参照できるようです。
試しに昨日書いた複数スレッドでチャンネルを共有し、2つのスレッドでsendし1つのスレッドでreceiveしてカウンタを操作するプログラムを Arc<Mutex<T>>
を使って書いてみました。