ロッテ様のバレンタインイラストを描かせていただきました。ベイビーアイラブユーだぜ🍫 #ロッテ #PR #ベイビーアイラブユーだぜ #バレンタイン https://t.co/gXoBwyG0zS
RubyのスレッドにはGiant VM lock (GVL) (Global Interpreter lock) が実装されており、同時に実行される ネイティブスレッドは常にひとつです。なので、スレッドセーフでないプログラムを実行しても、排他制御が効いているように見えます。 例えば次のコードを実行すると variable = 0 flag = true threads = 5.times.map do Thread.new do if flag variable += 1 flag = false end end end threads.each(&:join) puts variable 1が出力されます。何度でも。 スレッドセーフでないコードなのに結果が毎回1になるのはGVLのためです。 ここでスレッドセーフでない振る舞いをあらわに知りたいときは次のようにすればOKです。 variab
2018-04-26Techc, Japanese, Ruby (English Version) Rubyのスレッド切り替えのトリガーは? 昨日参加したkawasaki.rbで、スレッドの実行の切り替わりのタイミングがよく分からない、という話題がでました。 Ruby1.9でネイティブスレッドを用いた方式になったけれど、GVL(Giant VM Lock)の仕組みでIO以外の処理では同時に実行されるスレッドは1一つに制御されている、というような説明をネットで見かけました。 もしIO処理やスリープのタイミングでしかスレッドが切り替わらないとすると、下記のようなスレッド内でビジーループな処理をしているコードを動かすと・・・ for item in %w(first second third) puts item Thread.fork item do |param| (1..10000).ea
Cレベルではrb_thread_call_without_gvlまたはrb_thread_call_without_gvl2(違いはinterruptのありなし)を呼び出すことでGVLを外したスレッドで実行されることになります。逆に言うとこの二つの関数を呼び出しているところでは一時的にGVLが外れた処理がされていると言うことです。 2.6系のソースを軽く見た程度ですが、次のような所で上の関数が呼ばれていました。 Bignumの商・剰余 Dir.new/Dir.open Dir.chdir Dir.rmdir Dir.empty? Dir.glob File.chown Fileのstatといったファイルの状態を見に行く多くのメソッド File.rename File.truncate File.mkfifo IO.copy_stream IO.#openおよびIO#closeに関わるほぼ全
こんにちは! 去年の6月にインターンとして入社し、2月より正式に社員として迎えていただくことになりました、かなきゃんです(@kanacan) 。 ここまでどんな道のりだったか振り返ってみようと思います。 何してた人? まず、入社前の私ですが、「アイドルと某携帯キャリアの販売員」というちょっと変わった二足のワラジを履いていました。 小さい頃からの夢だったアイドルの活動をしながら、生活の為とはいえど実はこれまた夢だった携帯の販売員をしてました。 アイドルとして掲げた夢を追いつつ、販売員としても、やるからには貢献したい一心で誰よりも売って誰よりもお客さんから感謝される販売員を目指していました。 そんな努力が報われて、アイドルとしてやりたかった夢を叶えたタイミングと、全国3,000人の販売員の中から売上成績1位を2年連続で達成したタイミングとが重なり、次なる夢を考えるようになりました。 私は主にタ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く