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を作りました。

Node.jsの新版について。ライアン・ダール氏による東京Node学園祭 基調講演(後編) - Publickey
3ヶ月前に投稿されました. リアクション.