タグ

並列に関するEhrenのブックマーク (7)

  • irbから学ぶRubyの並列処理 ~ forkからWebSocketまで - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 irbから学ぶRubyの並列処理 ~ forkからWebSocketまで : melborne.github.com - 世の中は並列化花ざかりだよ 人間はシングルタスクのままなのに プログラミングするときは マルチタスクが要求されるなんて 世知辛い世の中になったものだね でも情報革命は始まったばかりだから 愚痴ってばかりもいられないよ 自分がその波にうまく乗れないとしても うまく乗ってる人の様を 間近で見てみたいと思うんだ そんなわけで.. Rubyのfork Thread Reactor EventMachine WebSocketなどの並列化について少し学んだので 自分の理解をここにまとめておくよ REPL irbはRubyにおける対話型の実行環境だよ こ

    irbから学ぶRubyの並列処理 ~ forkからWebSocketまで - hp12c
  • Clojureでデッドロック

    0x00. Clojureでデッドロックは起こるのか? Clojureの並行プログラミングモデルはSTMとagentを中心とした非常に洗練されたものだとされていることがある。Javaでスレッドを生で扱う場合の危険性と対比され、Clojureは開発効率がよく危険性が少ない、と思っているユーザも多いだろう。しかし実際にはClojureのSTMは書き込み競合が発生した場合に非常に遅く、また実際の並行プログラミングのためにはSTMとagentだけではなく他の方法も覚える必要があり、それほどシンプルなものではない。 安全性についてはどうだろうか。Clojureではデッドロックは起こるのだろうか。結論を書いてしまうと、Clojureで書いたアプリケーションもデッドロックを起こす可能性がある。以下にいくつかの例をあげる。 0x01. lockingを使うパターン ClojureにはJavaのsynchr

  • Remote Direct Memory Access - Wikipedia

    Remote Direct Memory Access(RDMA、リモートDMA)とは、ローカルのコンピュータのメモリから、異なるリモートのコンピュータのメモリへデータのDMA転送を行うことである。RDMAでは、両コンピュータのオペレーティングシステムを経由せずにデータの転送が行われる。これにより、高スループット、低レイテンシの通信を行うことができる。特に、大規模並列のコンピュータ・クラスターにおいて有用である。 概要[編集] RDMAでは、ホストバスアダプタを通じてアプリケーションメモリ(ユーザーメモリ空間)のデータが直接転送される。これによりゼロコピー(英語版)ネットワーキングが可能になる。通常行われるメモリとOSのデータバッファ間でのデータ転送が起きないので、CPUやキャッシュを用いることなく、あるいはコンテキストスイッチを行うこともなく、他の処理と並列にデータが転送できる。リード/

  • ClojureのSTMは使い物にならない

    0x00. Clojureがいけてる件について ここ数ヶ月でClojureをどんどん実戦投入してみているが、その成果は素晴らしいの一言に尽きる。Javaでは考えられなかったほどスマートかつ柔軟にデータ処理が可能であり、「あれ、こんなに短い記述でできちゃうのか!」と驚かされることが多い。そんなわけで、何でもかんでもJavaで片付けてきた筆者はここにきてClojureにかなり惚れ込んでおり、電子書籍やらウェブサイトやらで格的に情報収集を進めているのだが… 0x01. Clojureの並列プログラミング 現時点では、Clojureを実戦投入したのは、ちょっとした処理に使うツール的なものだけである。理由は単に、筆者がまだClojureの初心者だからだ。しかしそろそろメインの仕事であるサーバアプリケーションやウェブアプリケーションでも使いたくてウズウズしてきており、そのような視点からさらに調査を進

    ClojureのSTMは使い物にならない
  • メッセージングとスケジューリングで共有データにロック無しでアクセス

    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が最近リリースされ、重要な変...

    メッセージングとスケジューリングで共有データにロック無しでアクセス
  • 並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント : DSAS開発者の部屋

    並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント こんにちは、takada-at です。 Rubyのイベント駆動型ネットワークプログラミングフレームワーク Rev と EventMachine で HTTPクライアントを動かしてみました。 イベント駆動型ネットワークプログラミングフレームワークとは何か説明しだすと難しいですが、一言で言うと、以下のようになります。 # ふつうのフロー駆動型プログラム Net::HTTP.start(host, port){|http| res = http.get(path) #この処理が終わってから } puts "done" #この次の処理が実行される # イベント駆動型プログラム client = Rev::HttpClient::connect(host, port

    並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント : DSAS開発者の部屋
  • 並列イベント駆動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
  • 1