タグ

asyncに関するbayashi_netのブックマーク (15)

  • Promise で排他制御を行う - Qiita

    Promise での非同期処理時、排他制御を怠ったばっかりにバグを出してしまった、そんな経験ありませんか。私はあります。 スレッドを使う場合、Mutex や synchronized 等々、大抵排他制御を行うライブラリや構文などがセットでついてくるのだけど、Promise/A+ には無いので自前で制御する必要がある。 なので、Promise で排他制御が出来るライブラリを npm から調べ、めぼしい物二つをピックアップしてみた。 async-lock https://www.npmjs.com/package/async-lock 一番メジャーっぽいライブラリ。ダウンロード数も多い。 ロック取得時、key を指定する redis の key の set のように、key ごとに排他制御したい場合に便利 タイムアウトのサポート 待ち受けタスク数の上限のサポート インターフェイスが、acqui

    Promise で排他制御を行う - Qiita
  • AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD

    (2016/7/7、いただいたフィードバックを元に記事を修正いたしました。) JavaScript、特にNode.jsといえば、 コールバック地獄 がよく連想されます ^(1) 。たくさんの非同期I/Oを扱うコードを書いたことがある方には、おそらく以下のようなパターンはおなじみでしょう。 export default function getLikes () { getUsers((err, users) => { if (err) return fn(err); filterUsersWithFriends((err, usersWithFriends) => { if (err) return fn(err); getUsersLikes(usersWithFriends, (err, likes) => { if (err) return fn (err); fn(null, lik

    AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD
    bayashi_net
    bayashi_net 2016/07/12
    最近この辺のコード書いたけど、地獄避けられてて良かった
  • Amon2で非同期レスポンスを使う方法と、非同期WebAppのハマりどころ - 時計を壊せ

    この記事はPerl Advent Calendar 2013の15日目の記事です。 Amon2とは @tokuhirom さんが開発しているPerl製のWAF*1です。 Plackを軽くwrapしたような軽量でシンプルなWAFです。 現在、Version 6.00がリリースされていますが、Version 3.50からwebsocketのサポートが入り、 その関係でPSGIの遅延レスポンス/ストリーミングレスポンスのインターフェースに対応しています。 Amon2で非同期レスポンスを使う Amon2::Plugin::Web::Streamingを使う事により非同期でレスポンスを返す事が出来ます。 例えば、index.txを5秒後にrenderして返す場合は以下のようになります。 use strict; use warnings; use utf8; use Amon2::Lite; use

    Amon2で非同期レスポンスを使う方法と、非同期WebAppのハマりどころ - 時計を壊せ
  • 非同期IO周りの話

    SKS rep @repeatedly @cpp_akira そんな感じですねぇ.IO周りにもアプローチがいくつかあって,Async,Multiplexing,Non-Blockingとかあります.ごっちゃにしちゃっている人もいますががが Akira Takahashi @cpp_akira @repeatedly Multiplexingはこれから調べようと思ってたとこです。まだ何もわかりません。非同期とノンブロッキングは同義語っぽいので一緒にしちゃっていいかなーと思います。 SKS rep @repeatedly @cpp_akira Async / Non-Blockingは結構微妙で,確かに同一にする人もいるんですが,実際のケースで考えると非同期は処理が非同期なのに対して,Non-Blockingはあくまで処理がブロックしないというだけですね.

    非同期IO周りの話
  • libuv の Perl バインディング - unknownplace.org

    気分転換プロジェクトとして、libuvのPerlバインディングを書いている。 typester/p5-UV - GitHub 現状、timerとtcp周りを一通り実装したところ。 実装は愚直にlibuvの関数とperlの関数を1:1に(uv_tcp_init(...)をUV::tcp_init(...)というような形で)マッピングしている。 この実装はlow level APIと位置づけ、その上に使いやすい高レベルなインタフェースをPerl上で用意したいつもり。 このlow level APIをつかったTCP echo serverはこんな感じになる: use strict; use warnings; use UV; my $server = UV::tcp_init(); UV::tcp_bind($server, '0.0.0.0', 3000) && die 'bind error

  • 非同期処理をシンプルに書けるJavaScriptライブラリ「TameJS」 | エンタープライズ | マイコミジャーナル

    Tame is an extension to JavaScript that makes event programming easier to write, read, and edit. JavaScriptで非同期処理を記述したことがあるプログラマであれば、その記述の面倒さに閉口したことがあるだろう。たしかに、パフォーマンスを考えるとシーケンシャルに処理するよりもパラレルに処理させた方が有利なことが多い。しかし、記述がかなり煩雑なものになるため、あとからデバッグやアレンジ、ほかの非同期処理のマージなどを実施しづらい。 この問題に対するひとつの解決方法として活用できるライブラリが登場した。「TameJS」がそれだ。TameJSは日に1億のHTTPリクエストをさばいているサービスOkCupidの開発者らが開発したライブラリ。非同期処理を簡単に記述できるようにするという特徴がある。 もと

  • FurlX::Coro を使ってみたかった - はちゅにっき

    節電対応で休日が日・月になった hatyuki です。ということで、明日がおやすみ! 「DB から引っ張ってきた 5,000 件くらいの URL が、全部 HTTP Status Code 200 を返してくるか調べたいんだけど。」 という、なさそうでやっぱない依頼をうけたのでささっと書いてみることに。 ぱっと思いついたのはこんな感じ。 use strict; use warnings; use Furl; use My::Util qw/ db /; use Test::More; my $furl = Furl->new; my $itr = db->search('tables'); while (my $row = $itr->next) { my $res = $furl->head($row->url); is $res->code, 200, $row->url; } don

    FurlX::Coro を使ってみたかった - はちゅにっき
  • Tatsumakiアプリケーションを作ってみる - すぎゃーんメモ

    Tatsumakiを使ったアプリの例は幾つか見たことはあったのだけど、 TwitterStreamをTatsumakiを使ってブラウザ表示 - メメメモモ TatsumakiとTwiggy使ってみた - punitan (a.k.a. punytan) のメモ Big Sky :: TatsumakiとDUI Streamを使って画像ストリーミングサーバ作ってみた。 実際に自分で書いたことはなくて、結構分からないことが多かったので、自分でもサンプルアプリを作ってみた。やっぱり実際に書きながら試したりする方が理解できる…。 Tatsumakiにあるchatアプリの例を参考にしながら。 Tatsumaki/eg/chat at master · miyagawa/Tatsumaki · GitHub 作ったのはアクセスログ(timestamp, useragent)をリアルタイムにブラウザ表示

    Tatsumakiアプリケーションを作ってみる - すぎゃーんメモ
  • 1枚psgiファイルでchatのようなもの - ひゅんひゅんメモ

    前々から同時接続中のクライアントにサーバから通知というのがものすごーくやりたかったのだけどこのたびTwiggyとTatumakiのegとぶつかり稽古を重ねてようやくできた。 多分最近だとこういうのやるのにWebSocketとかでやるのかもしれないけどそれだとブラウザが対応してなかったりするとアレなのとTwiggyのegと全く同じになってしまう気がするのでjquery.ev.js使ってlong-poll(というのかしら)でやってますです。 use strict; use warnings; use Encode; use JSON; use Data::Section::Simple; use Text::Xslate; use Plack::Request; use Plack::Builder; #$ENV{TWIGGY_DEBUG} = 1; my $vpath = Data::Sec

    1枚psgiファイルでchatのようなもの - ひゅんひゅんメモ
  • Node.jsと非同期I/Oと混乱した私 - shutdown -r now

    最近、Node.jsに興味があります。Node.jsを調べていると、I/O関係で、非同期I/O、ノンブロッキング、コールバック等、いろいろとキーワードがでてきて混乱してきます。 そこで、ブログに書いて整理しよう思います。間違いがあれば是非、指摘してください。 言葉の定義 ◇非同期呼び出し(Asynchronous Call)と同期呼び出し(Synchronous Call)の違い 同期呼び出し(Synchronous Call) 通常メソッドを呼び出すとメソッド内の処理が完了するまで、呼び出し元には戻ってこない。このようなメソッド呼び出しのこと。 非同期呼び出し(Asynchronous Call) メソッドを呼び出した瞬間に呼び出し元に処理が戻ってくるような呼び出しのこと。非同期で呼び出されたメソッドは、環境によって処理されるタイミングが変わる。 ◇マルチスレッド(multithread

    Node.jsと非同期I/Oと混乱した私 - shutdown -r now
  • 株式会社CAM

    CAMはエンタメコンテンツ、ビジネスバラエティメディア、ライフスタイルメディアを主軸に30以上のサービスを展開しています。エンタメコンテンツの分野では、国内外で圧倒的人気を誇るアーティストやアイドルグループとのパートナーシップを結び、オフィシャルファンサイトや動画関連サービスを運営しています。

    株式会社CAM
  • Is Node.js Becoming a Part of the Stack? SimpleGeo Says Yes. - High Scalability -

    This is an interview with Wade Simmons, an Infrastructure Engineer at SimpleGeo, a service making it easy for developers to create location-aware applications, on their increasing use of Node.js as a backend service component, replacing code that would have at one time been written in Java, Python or Ruby. Node.js is finding it's way into many stacks these days and I was curious why that might be.

    Is Node.js Becoming a Part of the Stack? SimpleGeo Says Yes. - High Scalability -
  • node.js とは何か (2) - I am bad at math

    昨日に引き続き、いざ!part2なのだ。 前回では node.js と v8 の結びつきまでを書いたので、今日は Non-Blocking I/O の話を。 Non-Blocking I/O という言葉からブロックしない I/O をイメージするのはたやすい。でもこれを実現しようとなるといろいろとまあ面倒くさいんだよね。 それを解決する常套手段で言うとファイルディスクリプタ(ネットワークならソケットだね)を開いてそれをselectシステムコールの監視対象に加えておき、selectを呼び出すことで監視するっていう方法がある。こうすると何が嬉しいのかファイルディスクリプタが2つある場合で考えてみよう。 まずAとBというファイルディスクリプタを監視対象とする。 selectシステムコールを呼び出し、そのどちらかが読み出し準備完了となっていないかを確認する。 もしどっちも準備できていなかったらプロセ

    node.js とは何か (2) - I am bad at math
  • Twisted vs Tornado vs Go で非同期Webサーバー対決 : DSAS開発者の部屋

    昨日の takada-at の記事で「サーバー側では単純に100ms待ってからレスポンスを返すだけのページを用意しておき、」とあったのですが、今日はそのサーバー側の話をします。 もともとこのサーバーを作った動機は、takada-at が作成中の負荷試験システムがちゃんと並列に負荷をかけられるかどうかを検証するためでした。 すぐにレスポンスを返してしまうと、負荷試験スクリプトがきちんと並列に負荷をかけられなくても PV/sec が出てしまいます。 そこで、 epoll を使って高速に並列接続を扱えるTwistedフレームワークを使って、100msの遅延をしつつ数千PV/secに耐えるWebサーバーを作ってみました。 さらに、同じく epoll を使っている Tornado や Go にも興味があったので、こちらでも同じものを作成し、パフォーマンスを比較してみました。 コード まずは、コードを

    Twisted vs Tornado vs Go で非同期Webサーバー対決 : DSAS開発者の部屋
  • 並列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開発者の部屋
  • 1