2021-07-01から1ヶ月間の記事一覧
PythonとRubyではマルチスレッドを使うと性能がむしろ悪化する。そんな話を以前の記事で書いた。グラフに現れているように、1スレッドだとGoと同じくらいの性能なのに、マルチスレッドにするとスループットが激減してしまうのだ。ところで、ゲームやその他の…
C++に引き続いて、C言語でも非同期APIを整備した。非同期APIはC++のpromise/future機構を使えば簡単にできるのだが、それをCから使うにはそれなりの工夫が必要だった。
並列処理性能を重視したデータベースライブラリTkrzwだが、ついにGo言語をサポートした。並列処理が簡単に書けるGo言語と並列に読み書きできるDBMの親和性は高い。ここでは、各言語の性能比較をした上で、Goでの簡単な使い方について説明する。
TkrzwのGo言語インターフェイスを鋭意製作中であるが、今更ながら、「プログラミング言語Go」を読んだ。20年前に愛読した「プログラミング言語C」や「プログラミング作法」や「UNIXプログラミング環境」のカーニハン先生が著者の一人なので、なんか懐かしい…
非同期APIでは、該当の処理をバックグラウンドで実行するためにスレッドを使う。と同時に、バッチ処理やサーバプログラムなどではフォアグラウンドに相当するスレッドが複数個同時に実行される。となると、性能評価はフォアグラウンドのスレッド数とバックグ…
データベースライブラリの既存の同期的なAPIをラップして、非同期のAPIを作ったという話。C++のstd::futureクラスと独自のスレッドプールを使っている。std::futureのおかげで、スレッドプログラミングの知識が全く無いプログラマでも簡単に非同期処理機能を…
C++11標準以降のasyncとfutureによる非同期処理は非常に使いやすく、とても簡単に非同期処理を実装することができる。それによって、マルチスレッドでは複数の処理を並列実行できた場合には、スループットが向上させられる。一方で、単一の処理をシングルス…
ファイルの読み書きをマルチスレッドで並列に行うための仕組みを、各種プログラミング言語(C++、C、Java、Ruby、Python)で利用できるようにライブラリを整備した。メモリマップI/O、通常I/O、ダイレクトI/Oを同じインターフェイスで利用できる。Tkrzw-0.9.…
C++言語で書かれているデータベースライブラリTkrzwは、当然ながらC++のAPIを提供するが、C言語からは使えない。なので、主要機能をクラスでない関数でラップしたC言語のAPIも提供することにした。C言語のプロジェクトで使えることはもちろん、その他の言語…
データベースファイルを開いたプロセスが突然死した場合、次回にそのファイルを開いた際には自動的に復旧処理が走るようになっている。従来のバージョンでは、復旧に際して、データベース内の全レコードをスキャンして、データベースを再構築するのが専らで…