タグ

並列処理に関するBigFatCatのブックマーク (9)

  • 再入可能なロックの話 - from scratch

    先週、@t_wadaさんと@yosuke_furukawaさんと議論した再入可能性に関する私の経験について書きました | ロック(ミューテックス)の再入可能性 https://t.co/j3xeOUxaWt— Yoshiki Shibata/柴田芳樹 (@yoshiki_shibata) October 22, 2018 突然のロックの話 いきなりロックの話をしましたが、10月に(なぜか)一緒に働いてるメンバーとの中で大盛り上がりした話題です。もともとはリクルートテクノロジーズで行われている、柴田芳樹さんのプログラミングGo勉強会で話題になった話です。 yshibata.blog.so-net.ne.jp ここにも書いてあるのですが、 Golang では sync.Mutex を使ったロックでは再入可能ではありません。 一方 Java のロックは再入可能です。 で、この設計に関しては合理的

    再入可能なロックの話 - from scratch
  • Big Sky :: Go 言語の非同期パターン

    Gogoroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればど... https://mattn.kaoriya.net/software/lang/go/20160706165757.htm 2012 年に Rob Pike 氏が Google I/O で「Go

    Big Sky :: Go 言語の非同期パターン
  • Advent of D – The Scribbler of the Rueful Countenance

    I wrote my Advent of Code in D. The programming language. It was the first time I used D in earnest every day for something substantial. It was fun and I learned things along the way, such as easy metaprogramming, concurrency I could write correctly, and functional programming that doesn’t feel like I have one arm tied behind my back. I would do it all over again. My main programming languages are

  • Scalaのデフォルト実行コンテキストの並列数を変える方法 - Qiita

    Future のデフォルトや parallel collection はデフォルトの実行コンテキスト(ExecutionContext)を使って実行されます。 デフォルトの実行コンテキストは、実行機器のコア数分だけスレッドをプールします。 たとえば大きいリストを作って parallel collection で処理中のスレッド確認すると、コア数分あることがわかります。 システムプロパティを設定することで、コア数ではなく望みのスレッド数に変更できます。 Scala 2.11.7 のこの辺 をみるとどうすればいいかわかります。 scala.concurrent.context.minThreads -- 最小スレッド数。デフォルト 1。 scala.concurrent.context.numThreads -- desired? スレッド数。デフォルトコア数。 scala.concurren

    Scalaのデフォルト実行コンテキストの並列数を変える方法 - Qiita
  • Scalaの並列処理・非同期処理 - Qiita

    Scalaでは障害に強い非同期のフレームワークAkkaがあります。 例えば既存のバッチ処理にAkkaを導入する場合、 AkkaのActorモデルに合わせて全体の構成見直したほう奇麗に設計できますが、 大掛かりな修正になってしまうかもしれません。 非同期の処理単位での障害発生時のリトライや復旧を必要としない場合、 Akkaを導入しなくても、簡単に並列、非同期な処理を取り入れることができます。 サーバーのリソースがあまっていて、スケールせずに手軽に並列化したい場合に有効な手段です。 ##環境構築 実行環境は、Scalaの言語を開発しているTypesafeが提供しているActivatorで作ります。 ###1. Activator をダウンロード http://downloads.typesafe.com/typesafe-activator/1.2.10/typesafe-activator-

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

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

    Go 言語における並行処理の構築部材 - 詩と創作・思索のひろば
  • 第22回 Coroを使ったやさしいクローラの作り方(3) | gihyo.jp

    (1)はこちら、(⁠2)はこちらから。 並列・分散処理のためのクローラ ある程度大規模なクローラを作る場合は、一定時間内になるべく多くのURLから効率的にデータを収集する必要があります。接続先のホストごとに同時接続数やウェイトなどの配慮をしつつ、全体としては大量のリクエストを同時に処理する必要があります。検索エンジンのためのクローラ、定期的に同じURLにアクセスする必要がある更新チェックやフィードアグリゲータなどは、特に該当するでしょう。 Perlで高性能なクローラを書く場合の選択肢は2つあります。一つはforkによるマルチプロセスによるもので、Parallel::ForkManagerやParalell::Preforkを使うケースや、ジョブキューのためのフレームワークを使ったワーカがこれに該当します。もう一つはAnyEventやCoroを使ったI/O多重化によるアプローチです。筆者が好

    第22回 Coroを使ったやさしいクローラの作り方(3) | gihyo.jp
    BigFatCat
    BigFatCat 2013/12/25
    "AnyEventとCoroの違い" "Coroを使うと複雑な非同期処理を,いわゆる「コールバック地獄」に陥ることなくシンプルに記述できます。"
  • Async::Queueをリリース - DebugIto's diary

    PerlモジュールAsync::Queueをリリースした。 http://search.cpan.org/perldoc?Async%3A%3AQueue このモジュールは、あらかじめ登録した非同期処理を立て続けに実行する際に、実行並列度に制限をかけてFIFO実行してくれる、というもの。 ぶっちゃけた話、async.jsのqueueオブジェクトと同じ。(同じAPIを切ってある) 以下、使用例。 use strict; use warnings; use AnyEvent; use AnyEvent::HTTP; use Async::Queue; my $q = Async::Queue->new(concurrency => 3, worker => sub { my ($url, $callback) = @_; print STDERR "Start $url\n"; http_ge

    Async::Queueをリリース - DebugIto's diary
  • 【Perl】Parallel::ForkManagerモジュールで並列処理が便利過ぎて生きているのが辛い - oranie's blog

    とあるDBを利用したバッチ処理をやらせようとした時に #スクリプトの一部分 my @list1 = (適当なリストその1); my @list2 = (適当なリストその2); foreach my $value1 (@list1){ foreach my $value2(@list2){ #DBに接続して、あるテーブルのレコード件数countする→ #その結果を別テーブルにUPDATEするSQL実行処理; } }というまあ、foreachでグルグルグルグル回すスクリプトを書いたんですね。 で、まぁこれがクソ重かったんですね。テーブルのデータは全部メモリ上に載っているんですが、 10GB(1億レコードぐらい)ぐらいのテーブルで順番に$value1,$value2の変数を条件に使ってCOUNT()を使用した SELECT文を投げるので、一つのSQL投げたらDB側のCPUコアが100%になってし

    【Perl】Parallel::ForkManagerモジュールで並列処理が便利過ぎて生きているのが辛い - oranie's blog
  • 1