2018年11月18日日曜日

AOPSというものを定義したい - Node.js Async 非同期処理の性能を表すため

非同期処理の性能を表す単位として、だ。
asynchronous operations per secondの略とする。
1秒間あたりの非同期操作とか非同期処理の回数を意味する。
IOPSとかRPSを参考にした。
Node.js (JavaScript) で非同期処理を行っているのだが、どうも余計な処理が増えてきて遅くなっているように感じられたので、性能を計測したいと考えたのだ。
単純なコールバックだったものをasync awaitで処理したいので、Promise化 (util.promisify) したりして、なんだかいろいろと処理が増えすぎているような気がするのだ。
遅くなっていないのだろうか。
I/O処理 (Disk I/O, Network I/O, etc...) は、そもそもかなり時間がかかるものなのだから、そういう心配は余計なのかな。
Promiseで体系を作ってしまっているので、今更なのだろうが...

IOPS とは...
input/output operations per secondの略
ディスクの性能などを表す単位
1秒間あたりの入出力操作の回数

https://ja.wikipedia.org/wiki/IOPS
https://searchstorage.techtarget.com/definition/IOPS-input-output-operations-per-second

RPSとは...
回毎秒 (revolutions per second) または回転毎秒 (rotations per second) の略
https://ja.wikipedia.org/wiki/Rps_(単位)
RPMとも言うね。
私はRPSをrequest per secondの略としても良いと思った。
HTTP GETとかPOSTリクエストを何回処理できるか、という単位として、だ。
じゃあ、network input/output operations per secondでNIOPSでもいいか。
ダサいので却下。

node v10のfs.mkdirでmkdirp(mkdir -p)ができる様になってたね

Node.jsでやっとmkdirp (mkdir -p) ができる様になったんだね。

http://var.blog.jp/archives/77266235.html

今後使っていく。Node v10以降の環境が前提の時に。

Node v8 fs.mkdir: https://nodejs.org/dist/latest-v8.x/docs/api/fs.html#fs_fs_mkdir_path_mode_callback
Node v10 fs.mkdir: https://nodejs.org/dist/latest-v10.x/docs/api/fs.html#fs_fs_mkdir_path_options_callback

npm mkdirp: https://www.npmjs.com/package/mkdirp とか
npm mkdir-parents: https://www.npmjs.com/package/mkdir-parents
を使わなくて済むね。

2017年3月16日木曜日

なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由 へのコメント: 私はまだ Node.js (JavaScript) を使い続ける

Go言語もいいね。
でもまだgoroutineの素晴らしさがわからない人たちが多いんじゃないかな。
他の言語のスレッドとは全く違うものだ。
Go言語はNode.jsより断然エコで性能が良い言語である。
Go言語はC++より極めて安全な言語である。
でもまだ、やっぱり開発者が少ないと思う。惜しい。
人気が6~10位以内に入ってきたら本格的に使うことを考えたい。
あえて私がアーリーアダプターにならなくてもいいと思っている。

下記のリンク先の記事の1か所だけど、Node.jsのasync awaitのことを誤解している。
async awaitは断じてスレッドモデルではない。
イベントモデルのままスレッドの様に見えるだけ。
ココ、めちゃくちゃ重要。
だから、私はNode.jsを採用している。
イベントモデルを採用しており、シングルスレッドで動き、コンテキストスイッチングという無駄なCPU使用が極めて少なく、マルチスレッドでないために複数のスタックを保持するというメモリの無駄が極めて少ないから、私は JavaScript を使う。
もちろん、大規模プロジェクトでは型が重要なので TypeScript などが必須だと思っているので、そちらも使います。
なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由

2017年2月11日土曜日

Node.jsはエコなのでIoTに適している

Node.jsはエコなのでIoTに非常に適している。
と私は思う。
  • 単一プロセスで非常に少ないメモリで動作する。
    →ページングなどのコストが少ない。
  • 基本的にシングルスレッドなので無駄なコンテキストスイッチが発生しない。
    CPUを食わないので電力消費量が少なく発熱も少なくて済む。小さいデバイスには重要な要素。
  • 通信に強い。特に複数のデバイスとの非同期通信に。
IoTというか小さいデバイスには上記の特徴が有効だ。
更にサーバ側でも...
  • シングルプロセスでも、非常に少ないメモリで、1万~最大6万のデバイスと同時接続が可能。(ポート数の限界まで)
  • シングルスレッドがボトルネックになる場合は複数プロセス(コア数以下)のクラスタで対応できる。
    (複数サーバでの対応とほぼ同じ)
  • サーバ側でも無駄なコンテキストスイッチが非常に少ないためCPUを食わない。電力消費量も少なく熱も出ない。
もちろん C/C++, Go, Rust などの言語にはかなわないと思うけど、Ruby, Python, Perl, PHP, Java, などよりは遥かに Node.js が向いていると思う。

2014年7月20日日曜日

Webページの未読既読管理をGoogle Chromeのブックマークを使う

私はWebページを見たかどうか、つまり既読か未読かをブックマークで管理している。

いろいろと仕事柄、技術関連のキーワードで検索してWeb ページを見ている。
仕事じゃなくてもプライベートでもそうだと思う。

で、技術などで有効だなと思えるページで「あ、これ、前にも見たかも」、
と思うページに出くわす事が良くある。
そう思った時は、迷わずブックマークする様にしている。
Google Chrome を使っているので、Gmail アカウントに紐づけされたブックマークだ。

ブックマークすると、星★が黄色になる。
そうすると、次から同じページを見た時は、星★が黄色になるので、
以前にも見たページかどうかは すぐにわかるのだ。
ただ、それだけのこと。

ただしすごいブックマーク数になるのでフォルダ構成を考えておかないと
管理しずらくなる事は確かだ。

2014年のブックマークはこういうフォルダ名で管理している。
「2014/カテゴリ名.14」の様に「年」と「カテゴリ名」+「ドット」+「年」という感じで管理している。
するとブックマークした年がわかるのだ。

あ、もちろん、ただの日記とかニュースの様なページはブックマークしない。

2014年2月1日土曜日

Node.jsが成熟してきた。Express の代わりとなる Koa に移行しましょう。

Node.js が、もうすぐ成熟する時を迎えている。

Express の終焉を予告しよう。(個人的にね)

新しい Koa に移行しましょう。

Koa 0.2.0リリース


2013年2月2日土曜日

neu.Node がリリースされた。Node.js for iOSという感じだ。

neu.Node というものがリリースされた。
(neu.Node リリースのお知らせ)
去年から気になっていたやつだ。

Node.js for iOS という感じだろうか。
iPhone や iPad で Node.js が動いている。
iPhone 上で JavaScript で書かれた
サーバが動作するという事だな。

微Webサーバ、微Chatサーバ、等いろいろ考えられる。
MMOゲーム中に各自のChatルームを作れるかもね。
アイディア次第ではなかろうか。
何に役立つの? ではなく、何に使えるだろうか?
と真剣に考えていける人が広げていくだろう。

iPhone をセキュリティカメラにして、近くのPCで監視するとか。
これはPCをサーバにすればいいか。
neu.Nodeでは iPad をサーバにするとかができるな。
お店に入ると、WiFi 内だけで接続できる SNS とかどうだろうね。
お店で使える注文用 iPad とかどうだろうね。1台をサーバにして
他の iPad は注文を入れる様にするといいだろうな。
こんな事書くと誰か作っちゃうかな。

近くのゲートウェイをつかまないと外の世界には
サービスできないかもしれませんね。
近くの管理用PCとかを踏み台にして出てみる?

READMEなどに例として以下の様なものがあげられている。
・サーバー不要のローカル・ネットワーク・ゲーム
・WiFi 上で動くローカルなソシアル・ネットワーク・アプリケーション
・P2P スタイルのファイル共有、共同編集、コラボレーション
・リアルタイムなメディアの転送(セキュリティ・カメラ、リモート Jukebox など)
・Proxy サーバー内蔵の HTML5 アプリケーション

9分間の動画の中で iPhone 上でいろいろ動作している。
これぞ Node.js というものを全部!
・Hello World 表示とタイマーで応答を遅延させる例
・net socket echo server
  -> 入力したものをオウム返しするだけ
・net socket chat server
  -> 入力したものを接続している人全員に配信
・http web server
  -> 3msecで1requestに応答してるね
・http web server 3sec delayed (3秒遅延させる版)
  -> 3secで応答するよね
・ab (Apache Bench) でベンチマーク
  -> 1request → 3.004sec
  -> 10接続×10回 → 3.030sec
  -> 100接続×100回 → 5.690sec
YouTube → http://youtu.be/xzFH80-HYTo

すごいな。楽しみだな。

GistでREADMEが翻訳されてる
https://gist.github.com/4571063

GitHub でneu.Nodeのソースが公開されているよ
https://github.com/snakajima/neunode

neu.Node Facebook Group に参加しよう
https://www.facebook.com/groups/neunode/

neu.Node リリースのお知らせ
http://satoshi.blogs.com/life/2013/01/neunode.html

Life is beautiful 永遠のパソコン少年の理科系うんちく
http://satoshi.blogs.com/

2012年12月20日木曜日

プログラミング言語、速度比較


プログラミング言語、速度比較。
http://attractivechaos.github.com/plb/
http://benchmarksgame.alioth.debian.org/u64/which-programs-are-fastest.php

ベンチマークプログラムの種類によって得意・不得意は
出てくると思います。その辺を考慮して見ましょう。

C/C++, Java, C#, JavaScript(V8), Ruby, Python, Perl...

スクリプト言語の中では JavaScript(V8) は特に速いですね。

言語そのものの速度だけでは判断できないと思うけど、
速い言語でやりたい。

Node.js は比較されていないが JavaScript(V8) と
エンジンが同じなのでたぶん同程度でしょう。

2012年11月27日火曜日

GitHub がコード共有プラットフォームを制圧

GitHub がコード共有プラットフォームを制圧。(ソーシャルコーディング)


http://tech.a-listers.jp/2011/06/07/github-dominates-the-forges/
この頃は Ruby, Python が多かったみたい。
※2011年6月の記事です。


今は JavaScript (+Node.js) が Top ですね。
→ https://github.com/languages/

2012年11月20日火曜日

そろそろプログラミングを再開しようかな

何からはじめようか。

  • 言語は JavaScript、Node.js でよさそうだ。
  • Webだから、HTML5+CSS3も勉強しなきゃな。
  • GitHubは必要そうだ。
  • Herokuとかもな。

とりあえず、はじめてみるか。