タグ

並列・並行に関するuchida75cmのブックマーク (42)

  • 並列処理でWebコンテンツをダウンロードする方法 - Groovy, Scala, C#, Java, Ruby - なんとなくな Developer のメモ

    複数のWebコンテンツ(HTMLや画像など)をダウンロードする際に 1件ずつ処理していたのでは非効率です。 というわけで、並列的にWebコンテンツをダウンロードするプログラムを Groovy, Scala, C#, Java, Ruby で実装してみました。 主な仕様は以下で、外部ライブラリを使用せずに実装しました。 実行時の第1引数で出力先ディレクトリを指定 ダウンロード対象の URL を標準入力で指定(改行区切りで複数指定) URL 内のファイル名を出力ファイル名として使用 実行例 groovy download_web.groovy destdir < urls.txtサンプルソースは http://github.com/fits/try_samples/tree/master/blog/20110925/ Groovy の場合 Groovy 1.8 では GPars が同梱されてい

    並列処理でWebコンテンツをダウンロードする方法 - Groovy, Scala, C#, Java, Ruby - なんとなくな Developer のメモ
  • Non blocking and asynchronous

    2015/11/12開催の 【ヒカ☆ラボ】Node.js×MongoDBでのサービス運用が1時間で分かる!3年間の運用での失敗談とその対策に加えて、運用のハマりどころやツールついてもお話します! 株式会社サイバーエージェント 純様の資料です。

    Non blocking and asynchronous
  • 第12回 Herokuで非同期処理を実装しよう:Herokuで作るFacebookアプリ|gihyo.jp … 技術評論社

    はじめに 前回は、Herokuでファイルアップロードを行う方法をご紹介しました。gemを利用してAmazon S3にファイルをアップロードすることで非常に簡単にファイルアップロードが実現できることがわかったと思います。今回は、前回のファイルアップロードと同様に、Webサービスを提供する際によく利用される非同期の処理について紹介します。 Delyed::JobとCron Railsでの非同期処理は、登録したジョブを逐次処理する方式と定期的に処理を実行する方式があります。 1つ目の逐次処理は、来はリクエスト時に処理すべきジョブを実行に時間がかかってしまうため、リクエストの処理とは別のプロセスで実行することを指しています。画像をアップロードした際に、リサイズを実施する処理が重いため非同期にするというのが例です。これをRailsで実現するためには、いくつかのgemが用意されています。Heroku

    第12回 Herokuで非同期処理を実装しよう:Herokuで作るFacebookアプリ|gihyo.jp … 技術評論社
  • スレッドセーフ - Wikipedia

    スレッドセーフ(英: thread-safe)は、マルチスレッドプログラミングにおける概念である。あるプログラムコードがスレッドセーフであるという場合、そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないことを意味する[1]。特に、ある共有データへの複数のスレッドによる読み書きアクセスがあるとき、一度に1つのスレッドのみがその共有データにアクセスするようにして安全性を確保しなければならない。スレッドセーフでないコードを同時並行的に実行すると、データ競合による未定義動作を引き起こしたり、競合状態(レースコンディション)による意図しない動作を引き起こしたりする。場合によっては深刻なセキュリティホール(脆弱性)が引き起こされることもある[2]。 概要[編集] スレッドセーフはマルチスレッドプログラミングにおける重要な要素である。それは従来、オペレーティングシステムの開発者だけが考慮

  • InfoQ: RubyのFiberを非同期I/Oに使うNeverBlockとRevactor

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    InfoQ: RubyのFiberを非同期I/Oに使うNeverBlockとRevactor
  • 佐藤先生がErlang、Scala、Javaなどの並行処理を斬る! - スティルハウスの書庫の書庫

    ここ数日の佐藤先生のエントリが熱い! Erlang、ScalaGoJavaなどの現代の言語(Erlangは古いか)における並行処理の扱い方について、それぞれの歴史的背景や意義、得手不得手などがわかりやすく紹介されてます。80年代から並行処理やオブジェクト指向を研究されてきた佐藤先生ならではの視点ですね。ちょっと長くなりますが特に私が興味深かった部分を引用します(強調は私): 佐藤一郎: Web日記 (2010年) 最近、興味深いのはオブジェクト指向言語のScalaやErlangが話題を集めていることでしょうか。どちらもActor Modelをベースにしているそうですが、オブジェクト指向言語の歴史でいうと、Actor Modelなどの並行処理用オブジェクト指向言語の研究が盛んになったのは1985年からの6,7年ぐらいだと思います(Actor Model自身はもっと古いですが)。そして19

    佐藤先生がErlang、Scala、Javaなどの並行処理を斬る! - スティルハウスの書庫の書庫
  • 2010-12-22

    この記事は カーネル/VM Advent Calendar http://atnd.org/events/10701 のために書かれました。 これまで複数回に渡ってlock-freeデータ構造を紹介して来ましたが そもそもの前提を話していなかったり目的も不明だったりと不備だった点があったので 根元から一度おさらいしてみたいと思います。 まずロックを用いる事の欠点から 上図のような構図でロックによる相互排他を行うと様々な問題が発生します。 具体的に言うと排他に成功したスレッドに様々な災難が降りかかります。 主な事例として ↑ロック確保できたのにOSによってプリエンプションされる。 ↑物理メモリに乗ってない仮想メモリにアクセスしてしまった。 ↑キャッシュミスヒットによるメモリ待ち。 そんなに気にするほどのパフォーマンス低下ではないと思うかも知れませんが マルチコアの方向へ舵を切った新世代CPU

    2010-12-22
  • 並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi

    分散KVS kumofs のコードは、全体で約2万行です*1。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行*2で、全体の約半分を占めています。 ロジックは残りの半分*3だけで実装されています。 この実例から分かりますが、kumofsのような分散アプリケーションを開発するにはI/O周りの実装が大変で、とてつもなく大きな障壁になっています。*4 さらに今日では、性能を稼ぐためにマルチスレッド化が必須です。また、多数のクライアントを少ないリソースで効率よく相手にするには、非同期・イベント駆動型のアーキテクチャも必要になります。さらに、究極的な性能を達成すべく GC を利用しない C++ においては、実装のみならず設計も大変です。 これに加えてソケットAPIの難解な挙動に対処にしなければならないため、C言語やC++によるネットワークプログラミングは、vimの使いこなしなどと同

    並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi
  • Oni Labs: StratifiedJS

    StratifiedJS is Free and Open-Source Latest Stable Release Branch: 0.19 Stratified JavaScript Bringing JavaScript into the modern age. Today. For every browser & nodejs. Introduction StratifiedJS modernizes the JavaScript language for use in non-trivial web applications: No more asynchronous spaghetti. Underpinned by ideas from the Orc process calculus, SJS offers all the advantages of asynchronou

  • Oni Labs: StratifiedJS

    StratifiedJS is Free and Open-Source Latest Stable Release Branch: 0.19 Stratified JavaScript Bringing JavaScript into the modern age. Today. For every browser & nodejs. Introduction StratifiedJS modernizes the JavaScript language for use in non-trivial web applications: No more asynchronous spaghetti. Underpinned by ideas from the Orc process calculus, SJS offers all the advantages of asynchronou

  • parallel と concurrent、並列と並行の違い - 本当は怖いHPC

    2017/01/10 誤字脱字を修正しました 2016/11/07 内容を修正しました 2010/09/17 文章を修正しました 一般的に、parallelは並列、concurrentは並行と訳されます。検索してもずばり書かれた物がなかったので、僕なりの理解を書いてみます。 (注:言葉の定義の問題なので、複数の流儀があり得ます。端的に言えば、いわゆるCPUSIMD命令を「並行」と見なすかどうかに違いが現れます) 参考リンク: http://d.hatena.ne.jp/NyaRuRu/20060129/p2 http://d.hatena.ne.jp/muimy/20070322/1174526368 一番妥当(だと思う)定義 一言で言えば、 Concurrent(並行)は「複数の動作が、論理的に、順不同もしくは同時に起こりうる」こと Parallel(並列)は、「複数の動作が、物理的に

    parallel と concurrent、並列と並行の違い - 本当は怖いHPC
  • Scala Parallels Collections - kiyoshih blog

    この記事はScala Advent Calendar jp 2010 : ATNDの24日目です。 概要 Scala2.9ではParallel Collectionsが使えるようになります。 パソコンのCPUがコアいくつもあるんだからCollectionも並列処理したいですよね。 詳しくは、Index of /node/138/140を見ると良いでしょう。 準備 Scala2.9をビルドします Day17に登場した、エルシャダイにパクr、、、インスパイヤしたち○こで有名な@yuroyoroさんの Scalaのtrunkをビルドする - ( ꒪⌓꒪) ゆるよろ日記を参考に、githubからScalaのtrunkを落としてビルドします。 面倒なのでREPLで試します。 javaだと、RuntimeのavailableProcessorsでJVMが使えるプロセッサ数が取得できるのですが、scal

    Scala Parallels Collections - kiyoshih blog
  • Scala の限定継続(Delimited Continuations) - なんとなくな Developer のメモ

    Scala 2.8 では、限定継続(Delimited Continuations)という機能がサポートされる模様。 個人的に、この継続っていう機能の概念がイマイチよく分からなかったので実際に使ってみた。 Scala 2.8 Beta1 continuations プラグイン 事前準備 Scala 2.8 Beta1 で限定継続の機能を使用するには別途プラグインを使う必要があるので、まず Subversion を使って以下のソースを checkout し、Ant を使ってビルドしておく。 http://lampsvn.epfl.ch/svn-repos/scala/compiler-plugins/continuations/trunk continuations プラグインビルド例 >antなお、Ant でビルドするには環境変数 SCALA_HOME の設定が必要なので注意。(plugi

    Scala の限定継続(Delimited Continuations) - なんとなくな Developer のメモ
  • Actor + CPS でコールバック関数を隠蔽する - cooldaemonの備忘録

    勉強会第20回 - Scala勉強会 in 渋谷で久しぶりに発表するので下準備など。 ちょっとイロイロと手抜きコードですが… runTest メソッドだけ注目して下さい。switch メソッドを評価する度に Actor が切り替わります。 object Trampoline { import scala.actors.Actor import scala.actors.Actor.actor import scala.util.continuations.{reset, shift, cpsParam} def main (args: Array[String]) { TrampolineActorA.start TrampolineActorB.start reset(runTest()) Thread.sleep(100) TrampolineActorA.stop Trampolin

    Actor + CPS でコールバック関数を隠蔽する - cooldaemonの備忘録
  • Scala STM を試してみる その4 (Actor vs Actor + STM その2) - cooldaemonの備忘録

    その1、その2、その3 に引き続き、今回は reply が不要なパターン*1で試してみました。 import scala.concurrent.stm._ import scala.actors.{Actor, Exit} import scala.actors.Actor.actor import scala.actors.Actor.State.{New, Terminated} import System.currentTimeMillis import java.io.{File, PrintWriter} trait EnsureStartActor { def ensureStart(actor: Actor) { actor.getState match { case New => actor.start case Terminated => actor.restart ca

    Scala STM を試してみる その4 (Actor vs Actor + STM その2) - cooldaemonの備忘録
  • Scala STM を試してみる その3 (Actor vs Actor + STM) - cooldaemonの備忘録

    前々回、前回に引き続き ScalaSTM を試してみました。 結論から言うと、私の環境では Worker の数が 300 を超えた辺りから、カウンタ用の Actor への問い合わせがタイムアウトしまくるので、Actor + STM の方が良好な結果が得られました。 今回テストに使用したコードは下記の通りです。 import scala.concurrent.stm._ import scala.actors.{Actor, Exit} import scala.actors.Actor.State.{New, Terminated} import System.currentTimeMillis trait EnsureStartActor { def ensureStart(actor: Actor) { actor.getState match { case New => actor.

    Scala STM を試してみる その3 (Actor vs Actor + STM) - cooldaemonの備忘録
  • Scala STM を試してみる - cooldaemonの備忘録

    ScalaSTM を試してみました。正直、ライブラリ内でどのように STM を実現しているか理解していませんが、とりあえずプリントデバックしてみました。 準備 面倒なので sbt, maven 共に使いませんでした。 % curl -O http://scala-tools.org/repo-releases/org/scala-tools/scala-stm_2.8.1/0.2/scala-stm_2.8.1-0.2.jar % fsc-2.8 -classpath ./scala-stm_2.8.1-0.2.jar SampleForSTM.scala % scala-2.8 -classpath .:./scala-stm_2.8.1-0.2.jar SampleForSTM上記は、OSX + MacPorts の例であるため、適宜、ご自身の環境に読み替えてください。 サンプルコード

    Scala STM を試してみる - cooldaemonの備忘録
  • 非同期 I/O (1/4) - Web/DB プログラミング徹底解説

    はじめに 非同期 I/O は、時間のかかる I/O 操作を呼び出しをブロックさせずに行う方法です。Windows でサポートされている一般的な非同期 I/O を実現する方法は何種類かあります。ソケットでは非同期の方法がさらに増えますが、それはここでは取り扱いません。代表的なものに限定します。 特にこの資料ではサンプルコードを示します。その中で非同期 I/O を実際のコードに適用することを想定して、現実的なプログラムに適用するコツを併せてご説明します。 1. 非同期 I/O とは 非同期 I/O (Asynchronous I/O, MSDN ドキュメントの中では Overlapped I/O も非同期 I/O と翻訳されているようです) とは、I/O 操作の呼び出しをブロックしないで行うことです。例えば、遅いディスクから (フロッピーディスクみたいなのを想像してください) データを読み込む

    非同期 I/O (1/4) - Web/DB プログラミング徹底解説
  • ベクトル化 - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "ベクトル化" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2015年9月) ベクトル化(ベクトルか、英: vectorize) ベクトル命令化 - コンパイル時にループをベクトル演算命令に変換すること。この項目で説明。 ベクトル(1次元配列)の演算をサポートするプログラミング環境で、ループをベクトルに書き換えること 行列(多次元配列)を同じ要素を持つベクトル(1次元配列)に変換すること→行列の一列化 他の形式のデータをベクタ形式データに変換すること ベクトル化とは、コンピュータのプログラムにおいて、繰り返し処理で配列(ベクトル)の要素を

  • 並列アルゴリズム - Wikipedia

    並列アルゴリズム(へいれつアルゴリズム、英語: parallel algorithm)とは、アルゴリズムの各部分を異なる複数の処理装置(プロセッサ)上で実行し、最終的にそれらの結果を集めることで答えを得るアルゴリズム。 概要[編集] 一部のアルゴリズムはこのような分割が容易である。例えば、1 から数百数千といった範囲の数について、それぞれが素数かどうかを調べる場合、各プロセッサに部分範囲を割り当てればよく、最終的に結果のリストを連結すればよい。 また逆に円周率を求めるアルゴリズムの多くは、並列に動作可能な部分に分割するのは容易ではない。円周率を求める場合、前の結果を使わないと次のステップを効率的に実施できない。このような問題は質的に逐次的であるといえる。同様に、数値解析におけるニュートン法や多体問題を解くアルゴリズムなども質的に逐次的である。再帰的でありながら並列化が非常に難しい問題も