Node.jsの新版について。ライアン・ダール氏による東京Node学園祭 基調講演(後編)

2011年10月31日

サーバサイドJavaScriptとして話題になっているNode.jsの開発者ライアン・ダール氏が来日し、都内で開催されたNode.jsのイベント「東京Node学園祭」で基調講演を行いました。

本記事は「Node.jsのコンセプトとは? ライアン・ダール氏による東京Node学園祭 基調講演(前編)」の続きです。

新バージョンではWindows版も登場

fig

Nodeは2歳半になりました。(会場拍手)

fig

来週、第3安定版となるv0.6を出します。これらの新機能をこれから紹介します。

fig

v0.4は、WindowsではCygwinでしか実行できませんでした。Cygwinはエミュレーションレイヤですが、古くて遅くてバギーでした。そこでMicrosoft、Cloudkick、Joyentの4人のチームでWindows版に取り組んできました。

v0.4ではlibdevとliveioが使われていました。これらはUNIXでノンブロッキングと非同期I/Oを実現するライブラリですが、Windowsでは概念があまりに違っていて対応が難しいものでした。

一方、WindowsにはIOCP(I/O Completion Port)がありますが、IOCPはUNIXのファイル記述子のようなものではありません。UNIXのやり方では、ファイル記述子の状態が変わるのを待ってノンブロッキングI/Oを行いますが、IOCPではまったく違っていて、スケジューラがやってくれるので書き込むだけでいい。UNIXはノンブロッキング、Windowsは非同期、それがひとつの違いでした。

WindowsにはBSDソケットもありますが、多重化があまりできず、数千、数万コネクションをWinSock APIで行うのは難しいです。

そこでUNIXではいままでのAPIを使いWindowsではIOCPを使うライブラリ、libuvを作りました。

fig

TCPソケットはもちろんノンブロッキングで、HTTPサーバを書くのに必要な機能は揃っています。

fig

DNSの解決も非同期にできるようになり、非同期ファイルシステムAPIもあります。プラットフォームに依存しますが、Solarisならナノセカンドの分解能まで時刻がとれます。

fig

Windowsターミナルはくそったれで、どこかでマイクロソフトは間違えてしまっています。テキストを表示して色を変えるのにシステムコールが必要。そこでエスケープコードをlibuvが解釈して使えるようにしました。変わらないAPIを提供するのが目的でもあるからです。

fig

NodeがWindowsをサポートすることで、UNIXでの実行速度が遅くなるのではないかと心配されていました。しかし簡単なHello Worl的なベンチマークで計測したところ、速くなっています。その違いの多くはJavaScriptのV8が速くなったからですが。

fig

そのほかにも、V8 3.7でCrankshaftがデフォルトになり、繰り返し実行される部分の最適化が行われます。

V8 Isolatesでは、1つのアドレススペースでプロセス内の複数のVMを利用可能になります。つまりV8の中でのマルチスレッドです。これからの数週間でこれを導入する予定。

ガベージコレクションが新しくなって、これまで1.7GBに制限されていたヒープサイズが無制限になりました。

fig

Nodeの子プロセスを起動し、コミュニケーションを容易にする機能。

fig

Clusterは、たくさんのモジュールを1つのファイル記述子を使って管理するようなものです。

このコードでは、マスタープロセスが2つの子プロセスをフォーク。子プロセスも同じスクリプトを使って、hello worldを実行。マシンのリソース全部を使うようなサーバを作れます。

fig

(会場から質問)クラスタについて、ワーカーごとにメモリスペースを持っているとすると、それを共有する仕組みはありますか?

いまはそれぞれのワーカーがそれぞれのメモリを持っていて、共有する方法はありません。

この先V8 Isolatesを使って子プロセスを起動するときは、スレッドかプロセスかを指定できるようにするつもり。アドオンなどを開発するデベロッパーのために、JavaScriptのオブジェクトを共有できるようにもするつもりです。

ライアンダール氏の資料へのリンク

関連記事

あわせて読みたい

JavaScript プログラミング言語 Node.js




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本