タグ

multithreadに関するakishin999のブックマーク (38)

  • マルチスレッド環境でのtar - みつきんのメモ

    最近ではCPUはマルチコアであることが多く、プログラムがマルチスレッドに対応している場合、 処理時間を大幅に短縮することができる。 意外と機会の多いtarコマンドによる圧縮伸長処理はデフォルトではシングルスレッドで動作するため、 マルチコアCPUの恩恵が受けられない。 tarコマンドがマルチコアCPUの恩恵を受けるための方法を調べた。 従来の方法 tar使用時の圧縮形式とオプションについては次の表のようになる。 圧縮形式 拡張子 圧縮 伸長 圧縮率 処理時間 備考 GZIP tar.gz cfz xf 低 速 BZIP2 tar.bz2 cfj xf 中 中 XZ(LZMA2) tar.xz cfJ xfJ 高 遅 1.22からサポート 大体、vオプションを含んで実行することが多いため、コマンドの実行例は次のようになる。 $ tar cvfz HOGE.tar.gz ./HOGE マルチス

    マルチスレッド環境でのtar - みつきんのメモ
  • コアあまりのはなし- Message Passing

    Message Passing is licensed under CC-NC-SA. It has a feed and is hosted by a GitHub organization. Uses this for the OG image.

    コアあまりのはなし- Message Passing
  • マルチスレッド・プログラミングの道具箱

    まえがき クラウド上の仮想サーバから手元のスマートフォンまで、いまや複数のCPUコアを搭載するマルチコアはどこにでもある環境になりました。ハードウェア側が並列(Parallel)・並行(Concurrent)処理に向けて急速に進化する一方で、ソフトウェア側つまりプログラミング言語の進化はさほど追い付いていません。並行処理記述の手軽さを求めた Go言語 や、マルチスレッド処理の安全性を重視する Rust言語 などが登場してはいるものの、「普通にプログラムを記述するだけで複数CPUコア環境で高速に走るプログラミング言語」は遠い夢物語のままです。 モダンなプログラミング言語や並列・並行処理ライブラリは、複雑で難解なマルチスレッド処理を直接記述しなくてすむよう、安全性・利便性の高い抽象化レイヤを提供します(例:Go言語のgoroutineとchannel、Rust言語の Rayonライブラリ)。し

    マルチスレッド・プログラミングの道具箱
  • Ruby の Timeout の仕組み - tmtms のメモ

    Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end Timeout.timeout はブロック開始時にスレッドを作成し、そのスレッドで指定された秒数だけ sleep して、sleep から復帰してもまだブロックが終わってなければ作成元のスレッドに対して Timeout::Error 例外を発生させます。 指定時間以内に処理が終わる場合: timeout(X) │ スレッド作成 ─┐ │ │ ブロック実行 sleep X │ │ スレッドkill→ 🕱 │ timeout復帰 指定時間以内に処理が終わら

    Ruby の Timeout の仕組み - tmtms のメモ
  • C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?) - Qiita

    C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?)C#非同期処理StackOverflowマルチスレッド翻訳 StackExchange/Code Reviewでの質問"Exporting doc types using queues and multithreading"へのEric Lippert氏による回答より訳出。回答内容はオリジナル投稿"What are the best practices with multithreading in C#?"に呼応するため、編集前のタイトルを採用。原文および訳文のライセンスは引用元サイト規約の通り CC-BY-SA 3.0 に従う。 (補足:回答内容のトーンに合わせて口語調かつ意訳気味に訳出しました。誤訳指摘および訳出改善は歓迎

    C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?) - Qiita
  • PHPで作る非同期処理

    PHP Conference 関西 2016 で公演したスライドです 来シングルスレッドの処理系であるPHPですが、非同期処理が絶対に実現できないかというとそういうわけではありません。 素のPHPでは確かに難しいですが、各種エクステンションやライブラリの力を借りることで、PHPの文法で非同期処…

    PHPで作る非同期処理
  • Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば

    5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止まってしまっていたで、家を掃除しているときに見つけたもの。その後も趣味Android アプリを書くなど Java に触れる機会はあったけれど、せいぜいが AsyncTask を使うくらいで、マルチスレッドを強く意識してコードを書くこともなかった。 Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua Bloch,Doug Lea出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/22メディア: 単行購入: 30人 クリック: 442回

    Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば
  • scalaで調子に乗ってfuture{でスレッド量産してたらはまった

    c++ ( 4 ) java ( 1 ) javascript ( 4 ) linux ( 9 ) mac ( 3 ) scala ( 9 ) TIPS ( 4 ) ゲーム ( 1 ) ごはん ( 29 ) パソコン管理・設定 ( 29 ) プログラミング ( 29 ) ブログ管理・設定 ( 13 ) レーシック ( 4 ) 音楽 ( 4 ) 酸辣湯麺 ( 26 ) 日記 ( 15 ) 注・この記事は、scala2.10を使用しています。 scalaで、 import ExecutionContext.Implicits.global とfuture使ってて、 「あれ? futureで作った別スレッドの処理がなんか始まらないことがあるんだけど・・・」 ということがある人のための記事です。 scala使ってて便利なのにスレッドを超簡単に作れるってのがあるんだけど、 import Execut

  • ExecutionContextとblockingについて調べたメモ [scala] - だいたいよくわからないブログ

    この記事の結論 globalなExecutionContextではブロックする処理をblockingで包むとスレッド数が勝手に増えるから空きスレッドが無くて実行できないといったことを防げる。 ExecutionContext.fromExecutorService(new ForkJoinPool(100)) で生成されるThreadはBlockContextトレイトを継承してないのでblockingを使ってもスレッド数を増やした方が良いという情報がスケジューラに伝わらない。 akkaのdispatcherをExecutionContextとして使うとBlockContext付きのForkJoinPoolを簡単に作れる。 ExecutionContext.fromExecutorServiceでもForkJoinPoolのコンストラクタに自前定義したThreadFactoryを渡すようにす

    ExecutionContextとblockingについて調べたメモ [scala] - だいたいよくわからないブログ
  • Coroを使って並行処理 - JPerl Advent Calendar 2009

    こんにちわ。『層・圏・トポス』読者の会からの刺客、id:hirataraです。 「並行処理」って言葉はなんだか魅力的ですよね! そこで、今日はCoroを使った並行処理を紹介します。なお、Coroはコアモジュールではありませんので、使ってみたい場合にはCPANからインストールして下さい。 スレッドを作る Coroでは、asyncによって新しいスレッドを作ることができます。ただし、asyncでスレッドを作っても、何もしなければ他のスレッドに勝手に処理が移ることはありません。asyncで作成した別のスレッドに制御を移すには、明示的な操作が必要となります。ここではcedeを使って、asyncブロックへ処理を移しましょう。 use strict; use warnings; use Coro; async { print "Another thread\n"; }; print "main thre

  • Python: concurrent.futures を使った並行・並列処理 - CUBE SUGAR CONTAINER

    Python の concurrent.futures はバージョン 3.2 で追加された並行・並列処理用のパッケージ。 似たようなパッケージにはこれまでにも threading や multiprocessing があったんだけど、これはそれよりも高レベルの API になっている。 デフォルトでスレッド・プロセスプールが使えたり、マルチスレッドとマルチプロセスがほとんどコードを変えずに使い分けられるメリットがある。 下準備 使う Python のバージョンが 3.2 未満のときは PyPI にあるバックポート版のパッケージをインストールする必要がある。 $ pip install futures ただし、今回使う環境は Python 3.5 なので関係ない。 $ python --version Python 3.5.1 $ sw_vers ProductName: Mac OS X P

    Python: concurrent.futures を使った並行・並列処理 - CUBE SUGAR CONTAINER
  • RubyにおけるThreadとForkの速度比較 - while(true) ;

    こんばんは、kazunyaaanです。今回は並列処理の速度比較を行います。 (個人的に専門が数値計算で、MPI等でごりごり並列化をおこなっているのでとてもわくわくです(笑)) 前回の記事で、RubyにおけるThreadは多くの場合にて "並行処理となる" ことに簡単にふれてみました。 今回は、Threadだけでなく、Forkも含めた、 Rubyでのマルチスレッドおよびマルチプロセスのプログラムとその速度比較を行ってみたいとおもいます。 まず実験環境 今回は贅沢に Intel Xeon E5-2690 v3 @ 2.60GHz (Turbo Boost時 3.5) 12Core × 1 DDR4 ECC 16GByte @ 2133MHz × 4 の計算機サーバを使って、CentOS7、Ruby 2.2.0 の実験環境を用意しました。 コード 今回は、 Normal : 普通に書いた場合 T

  • アプリケーションに合ったExecutionContextを使う - tototoshi の日記

    scalaではFutureなどの裏側ではExecutionContextが動いています。ということはExecutionContextの使い方がいまいちだとFuture周りで問題が起きることになります。 よく起きる問題の1つとして、標準のExecutionContextがいまいちだった、というのがあると思います。 標準のExecutionContextはダメというか、適さないパターンがあるのですが、あまりよく考慮されずに使われてしまう印象があります。 まあ悪いのはコンパイラの親切すぎるエラーメッセージでしょう。 scala> import scala.concurrent.Future import scala.concurrent.Future scala> Future { 1 + 1 } <console>:9: error: Cannot find an implicit Execu

    アプリケーションに合ったExecutionContextを使う - tototoshi の日記
  • マルチスレッド/プロセスまとめ(Ruby編) - Qiita

    プログラムの実行単位 固有のメモリ空間を持つ(リソースを共有しない) マルチプロセスの場合、物理/仮想メモリ領域間のアドレス解決のオーバーヘッドが高い。 プロセスの実行単位 共通のメモリ空間を持つ(リソースを共有する) マルチスレッドの場合、物理/仮想メモリ領域間のアドレス解決は発生しない。 ユーザースレッド ユーザー空間(アプリケーションが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがあっても、1つのスレッドしか実行されない。 OSカーネルを介さないスレッド切り替えのため、スレッド切り替えに伴うオーバーヘッドが少ない。 仮想VM上で実行されるスレッドをグリーンスレッドと呼ぶ。 カーネルスレッド カーネル空間(カーネルが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがある場合、同時に複数(CPUコア数分)のスレッドを実行できる。 OSカーネルを介するスレッド切り替

    マルチスレッド/プロセスまとめ(Ruby編) - Qiita
  • JavaScriptはシングルスレッドだとようやく知ったのでメモ - コンパイラかく語りき

    どうも!chuckです。 前回、JavaScriptのスキル判定をしたところ、初心者以上中級者未満だったことが判明しました。 chuckwebtips.hatenablog.com そろそろ中級者だと思っていたのに…(´;ω;`) なのでフォローアップのために、これから少しずつ知識を補っていきます。 今回は第一弾として、JavaScriptがシングルスレッドであることについて、調べましたのでメモ。 そもそもシングルスレッドって? シングルスレッドとは、プログラムの処理が単一に行われることです。それに対して、マルチスレッドというものもありまして、こちらは同時にいくつもの処理が行われます。 結城浩さんというJava界隈の方の、小人の例えがわかり易かったです。 シングルスレッドとは1つの道の上を小人が歩くようなもので、マルチスレッドとは道が複数あってそれぞれの道の上を小人が一人ずつ歩いているよう

    JavaScriptはシングルスレッドだとようやく知ったのでメモ - コンパイラかく語りき
  • 並列に実行するんだけど並列度も制限したい時 - Qiita

    まあ例を挙げて話したほうがわかりやすい気がするので例をあげると、たとえばあなたはオンプレミスからコンテナまで総計数千台のホスト的な何かで構成されたシステムを管理する必要があります、と。この規模になってくると当然日々何かが壊れては何かが直っていくのはそういうものですね。で、じゃあ、刻一刻と変わる管理台帳と実際の環境の整合性をチェックすることを考える、と。すると要件としては、 管理台帳から存在するはずのホスト名とそのIPアドレスの一覧を引っ張ってくる そこからまずホスト名をババババと名前解決して管理台帳どおりのIPアドレスが解決されるか確認する 次にそいつらが生きてると限らんので、解決されたIPアドレスに向かってICMP Echoパケットをババババと打ちまくって反応を見る ping応答あった「なにか」が、当に管理台帳どおりのホストとは限らないので、とりあえずsshで入れるか確認する 入れたら

    並列に実行するんだけど並列度も制限したい時 - Qiita
  • システムコールを経由する生のLinuxスレッド | POSTD

    Linuxのスレッドは、洗練された美しい設計です。スレッドは仮想アドレス空間とファイルディスクリプタテーブルを共有するプロセスに過ぎません。プロセスによって生成されたスレッドは、メイン”スレッドの”親プロセスに追加された子プロセスです。これらは同じプロセス管理のシステムコールを通して処理されるので、スレッドに関するシステムコールのセットを分ける必要性を取り除きます。これはファイルディスクリプタと同様に洗練された方法です。 一般的に、UNIX系のシステムではfork()を使ってプロセスを生成します。新しいプロセスは、オリジナルのコピーとして独自のアドレス空間とファイルディスクリプタテーブルを取得します。(Linuxではコピーオンライトを使用して、この部分を効率的に処理します。)しかし、これは非常に高度なスレッドの生成方法なので、Linuxでは別の clone() システムコールを使用します。

    システムコールを経由する生のLinuxスレッド | POSTD
  • アクターモデルについて

    YouTube nnabla channelの次の動画で利用したスライドです。 【AI論文解説】クラスタリングによる大規模データセット自動キュレーション https://youtu.be/RGO10ALxuso 以下の論文を解説しています。 Automatic Data Curation for Self-Supervised Learning: A Clustering-Based Approach https://arxiv.org/abs/2405.15613 スライドで使用している画像は論文中のもの、またはそれを参考に作成したものを使用しています。

    アクターモデルについて
  • Goでスレッド(goroutine)セーフなプログラムを書くために必ず注意しなければいけない点 - Qiita

    Goは言語機能として並列実行をサポートしているけど、Goで書いたからといって自動的にデータ構造がスレッドセーフになるわけではないので、スレッド安全性を気にしなければならないはこれまでの言語と変わらない。どういうケースが良くてどういうケースがダメなのかを理解していないと安全なプログラムは書けない。それについて説明をしよう。 まず第一にEffective Goのこの一文は覚えておこう。 Do not communicate by sharing memory; instead, share memory by communicating. メモリを共有することで通信しようとしないこと。代わりに通信することでメモリを共有すること。 変数の値を変更したあとにチャネルなどを使わずに、おもむろに別のgoroutineからその変数の値を読み書きしてはいけない。そういうやり方だと読み書き操作の前後関係がき

    Goでスレッド(goroutine)セーフなプログラムを書くために必ず注意しなければいけない点 - Qiita
  • 大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方

    MongoDB Evenings Toronto - Monolithic to Microservices with MongoDBMongoDB

    大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方