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 が向いていると思う。