サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
kubo39.hatenablog.com
GitHubでよくjemallocatorを使っているときにdisable_initial_exec_tls featureを有効にしているのをみかける。 これはなにかという話をする前に、TLSモデルについて知っておく必要がある。 TLSにはアクセスモデルというものがあり、モジュールの種類(実行バイナリであるとかdlopenでロードされるものであるとか)や 別のモジュールからアクセスされうるものかといった条件によって種類がある。 ELFなどで一般に用いられているものとして local-exec initial-exec local-dynamic global-dynamic の4種類がある。 ざっくり、 local-exec: 実行バイナリの中でのみ参照されるTLS変数 initial-exec: 実行バイナリ or 最初にロードが走る共有ライブラリ内の静的TLSブロック内に存在するTL
あらすじ ある日のこと、Travis上のプロジェクトがdub使ってるとSEGVで落ちる、というチケットが。さらにスレッドが進み、どうもいろいろなパッケージで同様の問題が起きているとのこと。 LinuxでしかおきないぞとかdubでParallel GC(注:mark&sweep gcのmarkingのフェーズが並列)使ったときしか再現しないっぽいとか再現条件が特定されていく中でParallel GC内のスレッドでスタックオーバーフローが起きているのがどうやら原因だと判明。 といってもこの問題、Parallel GCの内部実装の問題ではない。OSスレッド、それもglibcのpthread実装に関連した問題だった。 この問題はglibcでは静的なTLSブロックがスレッドのスタックのtopに配置されることに起因する。 スレッド実装では最小スタックサイズを保証するために PTHREAD_STACK_
posix_spawn/vfork/clone(CLONE_VFORK) はメモリを共有するので速い. 速いが、親子でメモリを共有するので危険である. それでも速いのでプロセス起動で気をつけて使っている言語があり、どういう実装をしているか調べた. 前提 fork-exec間はasync-singal-safeな関数しか使ってはいけない http://mkosaki.blog46.fc2.com/blog-entry-886.html mallocを使っても問題ないかは実装依存 http://mimosa-pudica.net/linux-closefrom.html jemallocはおそらくだめ そんなことはなかった いまどきどれもpthread_atforkでロックの開放処理をしているのかも Rust どうも元ネタを追ってみるとFreeBSDでmalloc(jemalloc)が固まる問
自分ひとりで考えたわけではない(というかほとんどそうではない)が、採用面接で質問したいことを一覧でまとめてみた。 リスク管理はしていますか, 破滅的なリスクを無視してしまうことを避けるためになにかしていますか? どうやって成果の判断をするのですか? プロジェクトの納期が私個人の力で達成できない場合は、どのような行動が望まれますか? プロジェクトが失敗した場合、その責任はどの程度追うことになりますか? 開発のライフサイクルモデルはなんですか? アジャイル開発についてどのように考えていますか? 計画はどのように立ててますか? 計画どおりに進んでいるかどうかはどうやって観測しますか? 見積もりはどのように立てますか? 見積もりの不確実性にはどのような手法で対処していますか? 各人の仕事はどのようにアサインしますか? 各人の仕事が予定どおりに進んでいるかどうかはどうやって観測しますか? 上からふっ
cargo installで入れられそうなやつを雑にまとめてみた。 ripgrep(rg) - はやいgrep、あるいはag。 xsv - CSVツールキット。 alacritty - 速いらしいターミナルエミュレータ。 parallel - GNU parallelのRust版。 coreutils - GNU coreutilsのポート。使えないオプションや未実装のものも結構ある。 oxipng - pngファイルのサイズ圧縮。 rpc-perf - twitter製のrpcのベンチマークツール。memcachedの設定いじったときとか。 watchexec - ファイル変更にhookしてコマンド実行するユーティリティ。 flow - logのリアルタイム解析。 exa - lsのRust実装。デフォルトでいい感じになっているがコマンド体系が違うので慣れずに使わなくなってしまった。gi
まずは環境。 ( ՞ਊ ՞) :~/dev/crystal $ crystal --version Crystal 0.19.4 [7f82f79] (2016-10-07) ( ՞ਊ ՞) :~/dev/crystal $ cat /etc/issue Ubuntu 16.10 \n \l ( ՞ਊ ՞) :~/dev/crystal $ cat /proc/version Linux version 4.8.0-26-generic (buildd@lgw01-58) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #28-Ubuntu SMP Tue Oct 18 14:39:52 UTC 2016 こういう雑なコードを書く。 arr = [] of Int32 (0..1e7).each do |i| arr << i
第一弾は これ SANKYU http://tabelog.com/tokyo/A1322/A132203/13090354/ 東武東上線大山駅より徒歩1分。焼き肉。 A5級のいい肉が比較的お手頃な値段で食べられる。日によって提供される部位が違ったりして、運がいいとシャトーブリアンとか食べれる。 どの肉も美味しかったけど、とりわけモモ三角がおすすめ。 ピラブカウ http://tabelog.com/tokyo/A1305/A130501/13003982/ 池袋駅北口より徒歩5分。タイ料理のお店。 蟹とニンニクを炒めたものとか鶏肉の照り焼きっぽいものとかタイ風チャーハンを食べた。 中華料理とはまた違った味付けで、どれも美味しかった。 一品メニューの種類も多いので、また行っていろいろ試してみたい。 ナムプラーはかなり味濃くて臭味も強いので、一滴あればいいかも。 寿司やじま http://t
Crystalは軽量スレッドを切り替えるためのランタイムスケジューラをもってる。少し調べてみた。 OSスレッドはカーネルのスケジューラによって切り替わるが、軽量スレッドはユーザが切り替えの責任をもつ。 spawn で生成した軽量スレッドは sleep を呼ぶことで別の軽量スレッドに明示的に処理を切り替えることができる。 fiberで生成するだけではスケジューラの管理下にはおかれない。 spawn の中でブロックする処理をかくと全てのタスクがブロックする。 スケジューラはタスクをキューで管理していて、後から追加された軽量スレッドの処理からみていくが、sleep で明示的に切り替えを行った場合はlibevent2のタイマーによって処理が発火されるので実行順は不定となる。 キューから取り出して実行したタスクが未完了だった場合に再びキューの末尾に追加する。 よく引き合いに出されるGolangのスケ
このページを最初にブックマークしてみませんか?
『kubo39.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く