3 件中 1 - 3 件を表示
Displaying posts with tag: golang (reset)
Goでアロケーションに気をつけたコードを書く方法

GoはPythonのようなLLと比べると実行速度は速いのですが、GCは特別速いわけではないので、相対的にGCがパフォーマンスに与える影響は大きくなります。

また、Java に比べると、一時オブジェクトなどのために頻繁にヒープアロケーションを行うとGCの停止時間が長くなりがちですが、一方でヒープアロケーションを避けたプログラミングがしやすい言語でもあります。

MySQL ドライバのような低レイヤーのライブラリを作る場合、アプリケーション側の性能要件を勝手に決めることができないので、現実的な範囲でアロケーションを減らす努力をするべきです。

ということで、前回の記事

[さらに読む]
go-sql-driver/mysql でプレースホルダ置換をサポートしました

前回の記事で少し触れましたが、 go-sql-driver/mysql にドライバ側でのプレースホルダ置換を実装するプルリクエストを出していました。

それがマージされたので、背景のおさらいと利用方法を紹介しておきます。

背景

Go の database/sql の概要については前回の記事で解説しました。

そこで説明したとおり、 DB.Prepare() を使わずに直接 DB.Exec()DB.Query() を使った場合、 ドライバ側でのプレースホルダ置換に対応していないドライバでは prepare, exec, close で3回のラウンドトリップが発生することになり、パフォーマンスが悪くなります。

[さらに読む]
Goのdatabase/sql.Stmtのスケーラビリティを改善しました

先日、 Goに初めて私のパッチが取り込まれ 、コントリビュータに仲間入りしました。

このパッチは、 database/sql.Stmt をヘビーに使った時に性能がだいたい16コア以上のコア数にスケールしないという問題を解決するものです。 こういった問題をどうやって調査するのかと、Goにパッチが取り込まれるまでの手順を紹介します。

背景

私は TechEmpower の FrameworkBenchmarks という、いろんな言語/フレームワークで同一のアプリを作ってベンチマークするというプロジェクトで、主にPython関連のメンテナをしています。 …

[さらに読む]
3 件中 1 - 3 件を表示