タグ

ブックマーク / forest1040.hatenadiary.org (3)

  • 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
  • Node.jsの処理フロー - shutdown -r now

    Node.jsでは、「libev」と「libeio」を組み合わせて使用しています。 下記のようなファイル読み込み処理を実行すると以下のような処理フローになります。 var path = require('path'), fs = require('fs'), filepath = path.join(__dirname, 'a.txt'), fd = fs.openSync(filepath, 'r'); fs.read(fd, 1024, 0, 'utf-8', function(err, str, bytesRead) { console.log(str); }); 0. Node.js起動時にeio_init()でnode::EIOWantPoll()をlibeioに登録する。 libeioは、pollして欲しいタイミングになると、 node::EIOWantPoll()を呼び出すよ

    Node.jsの処理フロー - shutdown -r now
  • libeioのサンプルコード - shutdown -r now

    「libeio」は、C言語で書かれた非同期I/Oライブラリです。 実装的には、キューとスレッドプールを使い、I/Oを非同期並行処理します。 先程の「Boost application performance using asynchronous I/O」の図の右下(Asynchronous + Non-blocking)に「libeio」は位置するのではないかと思います。 libeioのサンプル 以下、libeioに含まれるdemo.cから抜粋したサンプルです。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <poll.h> #include <string.h> #include <assert.h> #include <fcntl.h> #include <sys/types.h> #includ

    libeioのサンプルコード - shutdown -r now
  • 1