スレッド間でカウンタを共有する(再び)

これまでも話してきたとおり、スレッド間でオブジェクトを共有することはハイコストなので、可能な限りオブジェクトを共有しない設計にすることが性能においても品質においても重要です。しかし、どうしてもオブジェクトを共有したい場合は、昨今の処理系にはそれを保証する機能が用意されているのでそれを使って安全を担保します。

Continue reading →

誤った並列化による性能劣化(その1)

前回の記事で「複数のスレッドが共有する変数をインクリメントするときには排他制御が必要」という話をしました。その結果、正しい値を得ることには成功したものの、性能が著しく落ちるという知見を得ました。今回は性能が出ないマルチスレッドプログラムに対して割り当てるCPU数をあえて制限してみます。

Continue reading →

エセSMTPサーバー

メールを自動送信するシステムのテストをしたいとか、ドメイン設定やSSL設定に必要な認証メールを受け取りたいとか、ありますよね。

こんなとき「届いたメッセージのアカウント確認もメッセージ転送も行わず、ひたすらOKステータスを返してメッセージの内容を出力する」というエセSMTPサーバーが欲しくなります。

Pythonに便利なワンライナーが用意されていました。

$ sudo python -m smtpd -n -c DebuggingServer 0.0.0.0:25

たったこれだけでエセSMTPサーバーが起動します。
オプションの詳細はこちら。 Continue reading →

2進数リテラルと2進数ダンプ

C++14では2進数リテラルが規格に加わりました。GCCやClangではCでも使えます。というか、もともとコンパイラの独自拡張機能として実装済みだったものが規格になったみたいです。使い方はこんな感じ。

#include <stdio.h>

int main()
{
    char c = 0b01000001;

    printf("0x%X\n", c);
    printf("%c\n", c);

    return 0;
}
$ ./a.out
0x41
A

Continue reading →