「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>その他、開発の色々]]

* 目次 [#z88dfb63]
#contents

*概要 [#o8e4fc83]
「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、~
あまりにもクライアントの数が多くなると効率が悪化しサーバがパンクする問題のこと。

-スレッドなどのリソースを大量に消費してしまう。
-最近は、「C10M問題」(クライアント1,000万台問題)などが出て来ている。

*nginxとNode.js [#e4cee847]
-[[nginx(エンジンエックス)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]]
-Node.js(ノードジェイエス)

**[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] [#m80767a6]

**Node.js [#nb955512]
***Node.jsの概要 [#gbe9386c]
サーバサイド JavaScript のNode.jsは[[ノンブロッキングI/O>#kb7b2a4b]]というモデルにより、~
[[イベントループ>#f5929c15]]を止めてしまうようなブロッキングを回避し、C10K問題に対応する。

***WindowsでNode.jsを使う。 [#w36c4df7]
-Unix系OS向けの非同期I/O環境(epoll/kqueue/event port)を使用する「libev」ライブラリを使用していた。
-Windows向けの非同期I/O環境(IOCP : Input/output completion port)を使用する「libuv」を開発した。
-現在、libeio / libev に代わって libuvが、Node.js のコアとして置き換わりつつある。

**2つの方式 [#k47ad412]
***イベントループ [#f5929c15]
UIサブシステムのメッセージループと同じ意味で利用される用語だが、~
Webサーバーに関するコンテキストでは、C10kに対応するアーキテクチャ用語として使用される。

-方式~
シングルスレッドでループ処理を回し、
--キューに溜まったイベントを処理していく方式。
--リクエストを1つのスレッドで受け取ることができる。

-特徴
--スレッドなどのリソース消費が少なくて済む。

-問題
--イベントループは、昔懐かしい、[[ノンプリエンプティブ・マルチタスク]]OSのように、~
どこかでブロッキングが発生すると、イベントループ全体がストップしてしまう。
--この「イベントループ」の問題を解決するのが「[[ノンブロッキングI/O>#kb7b2a4b]]」らしい。

***ノンブロッキングI/O [#kb7b2a4b]
-簡単に、ブロッキングを防止することでイベントループの停止を防止する。

-仕組みとしては、ざっくり、
--ワーカースレッドプールと I/O 処理がうまく協調して動き、
--スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。

>という、非常に優れた方法であるらしい。

-ASP.NETの同期コンテキスト上で機能する「[[async/await]]」は、~
≒この、イベントループ、ノンブロッキングI/Oで動作する。

*参考 [#j6998bcc]
**C10k [#v6f95ad3]
-C10k problem - Wikipedia~
https://en.wikipedia.org/wiki/C10k_problem

-Web2.0の先にあるC10K問題 - @IT~
http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html

-TheC10kProblem~
「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、~
あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと~
http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem

**[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]]とNode.js [#l012f5a5]

***[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] [#z21c470f]

***Node.js [#v9f9c882]
-Node.js を5分で大雑把に理解する - Qiita~
http://qiita.com/hshimo/items/1ecb7ed1b567aacbe559

-Node.jsについて調べてみた - Qiita~
http://qiita.com/kyrieleison/items/f726061803a0e536c3e1

-node.jsの仕組み(ノンブロッキングI/Oとかスレッドとか) - 元リア充エンジニアのメモ~
http://satoshun00.hatenadiary.com/entry/2012/08/02/172936

-注目のサーバサイドJavaScript実行環境「Node.js」 | 最新の技術・取り組み | IIJ~
http://www.iij.ad.jp/company/development/tech/activities/nodejs/

**Windows, .NET [#pfe7b76a]

-非同期 I/O - Web/DB プログラミング徹底解説
--(1/4)~
http://keicode.com/windows/win03.php
--(2/4) OVERLAPPED~
http://keicode.com/windows/win04.php
--(3/4) 完了ルーチン~
http://keicode.com/windows/win05.php
--(4/4) I/O 完了ポート~
http://keicode.com/windows/win06.php

-C#で非同期にする理由 【▲→川俣晶の縁側→ソフトウェア→技術雑記】~
http://mag.autumn.org/Content.modf?id=20130930175225

-c# - When should I use Async Controllers in ASP.NET MVC? - Stack Overflow~
http://stackoverflow.com/questions/30566848/when-should-i-use-async-controllers-in-asp-net-mvc

**イベントループ [#i1030dfd]
-イベントループ - Wikipedia~
https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AB%E3%83%BC%E3%83%97

-イベントループなしでのハイパフォーマンス~
C10K問題へのGoの回答 | プログラミング | POSTD~
http://postd.cc/performance-without-the-event-loop/

**ノンブロッキングI/O [#ma2e8685]
-ノンブロッキングI/Oと非同期I/Oの違いを理解する – PAYFORWARD~
http://blog.takanabe.tokyo/2015/03/26/240/

----
Tags: [[:インフラストラクチャ]], [[:Windows]], [[:プログラミング]], [[:.NET開発]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS