node.jsを支えるlibuvのチュートリアル"uvbook" :スレッド
この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。
スレッド
ちょっと待って下さい? なぜスレッドの話をするのですか? イベントループは web-scaleプログラミング を行うための 手段 だったのではないのですか? いいえ、違います。スレッドはまだプロセッサが処理を行う際の手段であり、同期プリミティブを苦労して使う必要があるとしても、スレッドは時々かなり有用です。
スレッドは全てのシステムコールを非同期の性質を持つかのように装わせるために内部的に用いられています。libuvはまた、スレッドを起動してタスクが終了した時に結果を収集することにより、実際はブロックするタスクを非同期的に実行するためにスレッドを用いています。
現在、2つの有力なスレッドライブラリが存在します。Windowsのスレッド実装とpthreadsです。libuvのスレッドAPIはpthread APIによく似ており、しばしば同様の部分があります。
libuvのスレッド機能の特筆すべき点は、これがlibuvそのものに含まれている(self contained)点です。他の機能がイベントループやコールバックと密接に関係しているのに対して、スレッドは完全に隠蔽されており、戻り値を直接経由したシグナルエラーを必要に応じてブロックし、最初の例で見るようにイベントループを実行する必要すらありません。
libuvのスレッドAPIはスレッドの意味や文法がプラットフォームごとに全て異なり、完全さの店でもレベルが異なるのでとても制限されています。
この章では以下の仮定を行います: 一つのイベントループだけが存在し、単一(メイン)のスレッド上で動作する ( uv_async_send
を用いた場合を除き)イベントループは他のスレッドと関連することはありません。 :doc:multiple
は異なる複数のスレッドでイベントループを実行し、これらを管理します。
node.jsを支えるlibuvのチュートリアル"uvbook" :ネットワーク処理
この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。
ネットワーク処理
libuvにおけるネットワーク処理は直接BSDソケットを用いた場合のそう変わりませんが、いくつかのことは簡単になっており、全てはノンブロッキングであり、コンセプトは同じです。加えてlibuvはBSDソケットを用いたソケットの準備、DNSルックアップ、色々なソケットパラメータの調整のようなやっかいで何度も必要となる低レベルの処理を抽象化するためのユーティリティ関数を提供します。
uv_tcp_t
と uv_udp_t
構造体はネットワークI/Oのために用いられます。
node.jsを支えるlibuvのチュートリアル"uvbook" :ファイルシステム
この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。
ファイルシステム
単純なファイルシステムの読み取り/書き込みには uv_fs_*
関数群と uv_fs_t
構造体を用います。
Note
libuvのファイル操作はソケット操作とは異なります。ソケット操作はOSから提供されたノンブロッキング操作を用いています。ファイルシステム操作は内部的にはブロッキング関数を用いていますが、これらの関数はスレッドプールの内部で呼び出され、アプリケーションとのやりとりが必要になるときにイベントループに登録されたウォッチャに通知されます。
全てのファイルシステムは2つの形態を持ちます - 同期的 と 非同期的 です。
同期的 な形態はコールバックが指定されない場合に自動的に呼び出され(、そして ブロック され)ます。関数の戻り値はUnixの戻り値と同様です(通常は成功時に0、エラー時に-1)。
非同期 な形態はコールパックが渡された時に呼び出され、戻り値は0となります。
続きを読むnode.jsを支えるlibuvのチュートリアル"uvbook" :イントロダクション
この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。
イントロダクション
この'書籍'はWindowsとUnixで同じAPIを提供するハイパフォーマンスなイベント駆動(evented)I/Oライブラリとしてlibuvを使うためのチュートリアルです。
この書籍はlibuvの主要な部分について言及するよう意図していますが、全ての関数やデータ構造を扱うリファレンスではありません。公式のlibuvのドキュメントはlibuvのヘッダファイル自身に含まれています。
この書籍はまだ執筆中であるため不完全ですが、成長するにつれて読み応えがあるものになるでしょう。
続きを読むnode.jsを支えるlibuvのチュートリアル"uvbook" :目次
はじめに
node.jsの基礎となるライブラリにlibuvというものがあります。以前からnode.jsの仕組みについて気になっていたので調べようと思ったところ、uvbookというlibuvのチュートリアルがあったので訳してみることにしました。
この文書のライセンスについて
この文書のライセンスは Creative Commons - Attributionであり、翻訳前の原文は https://github.com/nikhilm/uvbook となります。掲載するにあたり、見出しのスタイルなど、文書の体裁・フォーマットを一部変更しています。また、関連するコードはパブリックドメインです。
目次
イントロダクション
基礎
ファイルシステム
ネットワーク処理
スレッド
プロセス
イベントループ
ユーティリティ
この書籍について
Nikhil Maratheはプログラミングをする気のなかったある日(2012年6月16日)の午後にこの書籍を書き始めました。彼はnode-taglibの仕事をしている間、libuvのよいドキュメントのなさに苦しめられていました。リファレンスが存在しているのにも関わらず、包括的なチュートリアルがありませんでした。この書籍はその要求に対するアウトプットであり、正確を期す努力をしています。それは、Nikhilが若く未熟であり、ある点でひどく誤っている可能性があるということです。もしあなたが間違いを見つけた場合、彼はあなたに教えてほしいと思っています。また、レポジトリをfork し、pull reqestを送ることによりこの書籍に貢献することができます。
Nikhilは2つのライブラリの意味に関して記載されているMarc Lehmannによるlibevについての素晴らしいman pageのおかげでこの書籍を執筆することができました。
ライセンス
この書籍の内容はCreative Commons - Attributionに基いてライセンスされています。すべてのコードは public domain です。
リーダブルコードを書くこと、あるいはコードをデザインすること
リーダブルコードという書籍を読みました。
私はデザイナというわけでは全くないのですが、視覚デザイン(知覚心理学)におけるゲシュタルトの法則と類似点を感じたのでまとめておきます。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (111件) を見る