RustでCrossbeamのグリーンスレッドを試してみる
Rustでは所有権やライフタイムがあるおかげで安全な実装をすることが出来ますが、Rustを始めたばかりの人は同じインスタンスに対し複数スレッドで一つのスレッドで監視をして、もう一つのスレッドで操作するといったことを行いたくなった場合大分てこずると思います。自分も色々調べて大分てこずっているので、分かったことをまとめてみたいと思います。
Rustで扱えるスレッドについてはOSスレッドとグリーンスレッドがあり、RustBookの以下のドキュメントに説明があります。
https://doc.rust-jp.rs/book/second-edition/ch16-01-threads.html
OSスレッドはOSのAPI呼び出しによって得られるスレッドになっていまして、グリーンスレッドは仮想マシン上で管理されているスレッドになります。OSスレッドの方が性能が良いのですがRustの所有権のライフタイムによりてこずっていました。
続きを読むQuickFIX/Jのサンプルに対してRustでリクエストを投げてみる
QuickFIX/Jとは
QuickFIX/JはFIXエンジンの実装になります。FIXエンジン自体が聞きなれないと思いますが、FIXエンジンは電子取引で使われるプロトコルであるFIXプロトコルの実装になります。FIXエンジンについては以下のリンクが参考になります。
https://javarevisited.blogspot.com/2012/01/what-is-fix-engine-in-fix-protocol.html
QuickFIX/Jの公式ページによると、もともとC++で実装されたQuickFIXをJavaで実装しなおしたもののようです。
QuickFIX/Jの実装は以下で確認できます。
github.com
BNFパーサが生成したパーサでパースした後に整形表示してみた
前回BNFパーサーが生成したパーサーでログをパースできるようになりましたので steavevaivai.hatenablog.com
今回はパースした後に整形表示できるようにしてみます。
修正のコミットはこちらになります。
bnfパーサー 整形表示実装 · teruuuuuu/logging_converter@ab5b156 · GitHub
自作のパーサーでログファイルをパースしてEmbulk経由でElasticsearchに取り込んでみる
例えば以下のようなAAA ~ CCCに対してaddやremove、setの操作を行う時系列のログデータをもとに、現在の値がどうなっているのかを手動で見ていくのは大変かと思います。
2020-05-24 11:25:18,784 INFO jp.co.teruuu.LoggingService [main] add BAA:99.674 2020-05-24 11:25:18,784 INFO jp.co.teruuu.LoggingService [main] set BBB:5.730 2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] hello hello CCC 2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] move from ABCtoCAC : 68.080 2020-05-24 11:25:18,785 INFO jp.co.teruuu.LoggingService [main] add ACC:20.390 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello ABA! 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] add AAA:54.581 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] globalRemove 46.694 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello world AAC 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello BCB! 2020-05-24 11:25:18,786 INFO jp.co.teruuu.LoggingService [main] hello hello ABB! 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] set AAC:59.363 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] globalAdd 63.874 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] set CCC:85.101 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello hello ABC! 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello hello CBC! 2020-05-24 11:25:18,787 INFO jp.co.teruuu.LoggingService [main] hello world ACC! 2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] globalAdd 55.108 2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] move from BBBtoBAC : 46.040 2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] move from CAAtoCCC : 90.571 2020-05-24 11:25:18,788 INFO jp.co.teruuu.LoggingService [main] add BCA:36.741
これを解決するためにログファイルをパースしてElasticsearchに取り込んでみるのを試してみたいと思います。 ちなみにですが今回の検証に使うログは自前で生成したものを使っています。 string_generator/LoggingService.java at master · teruuuuuu/string_generator · GitHub
続きを読むRustでlazy_staticを使ってグローバルでイミュータブルな定数を初期化してみる
以前Rustでチケットモデリングの実装をしたとき、グローバルでイミュータブルな定数を実装できず毎回初期化していたのですが、lazy_staticを使えば解決できるとのことだったので試してみました。 steavevaivai.hatenablog.com
詳しくは以下のQiitaの記事が詳しかったので、それを参考にlazy_staticのクレートを追加して修正を行いました。 qiita.com
具体的な修正部分は以下になるのですが、 github.com
続きを読む