読み進めていった際のメモです。概要libuvは「クロスプラットフォームサポートのためのライブラリ」で、Node.jsで使われることを想定して開発が進められてきた(現在はNode.js以外でも用いられている)。「イベント・ドリブンな非同期I/Oモデル」をもとに設計されていて、以下のようなものを提供しているプラットフォーム間で異なるI/Oポーリングの仕組みの抽象化(ハンドルとストリームによる)ソケットなどの抽象化ファイルI/Oやスレッド周辺の各種機能ハンドルとリクエストlibuvでは、イベントループとともに、ハンドルとリクエストという2つの抽象化された概念が用意されている。ハンドルは「(アクティブなときに)何らかの操作を行うことができる、長期的に存在するオブジェクト」を表す。その例としては以下のようなものがある。イベントループが一周するたびに一度呼ばれるprepareハンドル新しいコネクションができるたびにコールバックを実行するTCPサーバーハンドルリクエストは(一般的に)「短い期間で終わる有効な操作」を表す。リクエストはハンドルを通して行う(例:writeリクエストはハンドルを通してデータを書き込む)ことも、スタンドアロンで行う(例:getaddrinfoリクエストはハンドルを用いず、ループの中で直接実行される)こともできる。(イベントループ)I/Oループ(イベントループ)は、libuvの中核をなしている。イベントループはすべてのI/O操作を管理し、「一つのイベントループが一つのスレッドに対応する」ことが想定されている。異なるスレッドで動作する限り、複数のイベントループを利用することができる。ちなみに、イベントループ(そして、ループやハンドルに関係する他のAPI)は、基本的にはスレッドセーフではない。イベントループは、I/Oに対してシングルスレッドの同期的な(一般的な)アプローチを用いている。WindowsではIOCP)。ハングアップ)とともにコールバックが呼ばれる、これを用いてハンドルはI/O操作を行える。イベントループへの理解を深めるために、一回のループでどのようなことが行われているのかを確認する。「現在時刻」が更新される。イベントループは、ループの最初に取得した時刻をキャッシュすることで、時刻関係のシステムコールの発行回数を減らしている。ループが生きているのなら、イベントループの周回がはじまる。生きていないのなら、イベントループは終了する。(有効かつ参照されているハンドル、有効なリクエスト、またはclosingハンドルが存在する場合、イベントループは生きているとみなされる。)適切なタイマーが実行される。イベントループの「現在時刻」よりも前に設定されていたコールバックが呼ばれる。pendingコールバックが呼ばれる。多くのI/Oコールバックは、I/Oのポーリングの直後に呼ばれることが多い。コールバックの実行を(イベントループの)次の周回に遅らせるということもある。そのようにして前の周回で後回しにされたI/Oコールバックが、ここで実行される。idleコールバックが呼ばれる。prepareハンドルのコールバックが呼ばれる。これはイベントループがI/Oブロックをする直前に呼ばれる。pollタイムアウト(どれほどの時間I/Oのブロックを行うか)を計算する。計算は以下の通り行われる。一つ前のステップで計算した時間分だけ、I/Oのブロックをする。(読み書きのために)ファイルディスクリプタを監視しているI/O関連のハンドルはここで適当なコールバックを呼ぶ。checkハンドルコールバックが呼ばれる。checkハンドルのコールバックはI/Oのブロックの後に呼ばれ、prepareハンドルのコールバックと対を成している。closeコールバックが呼ばれる。よってcloseされた場合、そのハンドルはcloseコールバックを呼び出す。モードでループが走っている場合には、ループが生きてれば次の周回に入り、そうでなければループは終了する。libuvはファイルI/Oにおいてスレッドプールを用いているが、ネットワークI/Oは常にシングルスレッド(イベントループのスレッド)上で行う。pollingの機構はUnixとWindowsで大きく違うが、libuvは実行モデルに一貫性をもたせている。ファイルI/OネットワークI/Oとは違い、(設計上の困難さから)ファイルI/Oはスレッドプールを用いてファイルのI/Oを行っている。libuvは現在グローバルな(全てのイベントループが用いることのできる)スレッドプールを用意している。3種類の操作がこのプールで行われる。(Node.js)ログイン機能のあるアプリケーションを開発する場合、(大体の...2019-03-03ウェブ開発でNode.jsを採用するメリット・デメリットウェブ開発においてある程度の地位を築いた感のあるNode.jsです...2019-02-13Express/Node.jsでTypeScriptを使ってみる最近、バックエンド開発でNode.jsを用いています。特徴まとめAWSを使っている人全員が触ったことがあるであろうS3。(1)リンクホームページfeedレビューのまとめスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。