プログラミングとは、効率を追求する道具と認識してます。
効率の悪いプログラミングは、人が人が作業を行ったほうが早いという場合もあり、コンピュータにプログラムを実行させる意味がほぼ無くなりますよね。
アプリを起動してから、実際に使い始めるまで数十秒かかってしまうようなアプリって、使う気が失せてしまいます。
また、アクセスしてから、何秒待っても表示されないwebページって、大半の人が離脱をしてしまいます。
ちなみに、webサイトの離脱をするブレイクポイントの秒数は、
3秒というリサーチ結果は有名なので、マーケティングを気にする場合は覚えておきましょう。
コンピュータの負荷について
処理が
遅い、プログラムが
重い、効率が
悪い。
こんな場合のプログラムの事を、
負荷が高いという事が考えられます。
コンピュータ負荷って一体どんなモノなんでしょう?
多くの場合は、経路が多くなる為に、コンピュータ負荷が高くなってしまう事が原因になります。
簡単に判断するには、プログラムの行数が多いほど、処理負荷は高くなる事がわかります。
でも、for文などのloop処理は、プログラムの行数に関係なく、繰り返される回数に応じて負荷が高くなってしまうんですね。
でも、処理したプログラムの行数に応じて負荷が高くなる事は違いません。
1つのファイルに書かれているプログラムは、行数やloop処理の回数などで判断できますが、フレームワークやライブラリなどを使っている場合、裏側でどのような処理が行われているか詳しく知らないと思いも寄らない負荷が発生している場合もあります。
こうしたブラックボックスで悩むのがもどかしい人は是非、プログラミングの内部に対して詳しくなって置く必要があるんですね。
for文の負荷
次の様なプログラムの負荷を考えてみましょう。
var num = 0
for(let i=1; i<=10; i++){
num += i
}
console.log(num)
結果 > 55
1から10までの数字を全て足した場合の答えを求める簡単なプログラムですが、これはfor文が10回処理を繰り返しているだけなので、実行してから瞬時に答えが返ってきます。
実際に公開サイトなどで、不特定多数のユーザーデータを扱う場合、この値が膨大になってしまう場合もあります。
例えば、100万人のユーザーがいるwebサイトで、その中から特定の条件のユーザーをピックアップするような場合、SQLのSELECTで処理すればいいと考えている人も、裏ではプログラムで処理をしているので、for文ではなく別視点で考える必要があるんですが、
プログラミングでは必ず
もっと効率よく処理出来る方法というのが存在します。
いろいろな人のプログラムを見て学習するしかないのですが、こうしたアルゴリズムって、ケースバイケースなので、ピンポイントで「こうすればいい」というのは参考書には書かれていないんですよね。
処理数を抑える学習(負荷軽減)はソート・アルゴリズム学習をすればいい
ソートアルゴリズムは、処理効率として負荷軽減を目的にされることが多いです。
実際に自分でソートアルゴリズムのプログラムを実行して、負荷を体感したり、負価値測定をして効率を追求するというのもなかなかおもしろい体験につながります。
プログラミングのレベルアップをしたい人は、このブログの特集ページで掲載しているので、参考にしてみてください。
アルゴリズム学習
サーバー負荷について
webサイトの表示が遅い原因は、プログラム以外に、回線速度やサーバー処理速度(スペックやアクセス過多)なども考えられます。
回線速度は、手のつけようがありませんが、サーバー負荷は、メンテナンスや設定に応じて対応ができます。
最近のwebエンジニアは、フロントエンジニアとバックエンドエンジニア(インフラエンジニア)などに分類され、プログラミングで遅くなっているのか、サーバー負荷が高くなっているのかが分かりにくい開発チームも増えているようですが、これらは一元的に管理(監視)しなければいけません。
※監視って何?という人は、別の回で扱うので今回は説明を割愛します。
とにかく、サーバー負荷が高い場合に、表示が遅いのは、プログラムの効率が悪いと言われると、実際にプログラミングをしたエンジニアは不本意だと考えてしまうでしょう。
サーバーの負荷の多くは、アクセス過多とされる、人気サイトの場合にユーザーが大量に同時アクセスをする場合に起きてしまいます。
この場合、apacheやnginxなどの1アクセスにつき、1プロセスが起動する仕組みなので、その量がある一定の値を超えた場合にサーバーの許容範囲を超えて、極端にスピードが落ちることになります。
大体はメモリオーバーになって、ストレージスワップしてしまう場合や、CPU処理がキャパオーバーになり、LoadAverage(処理の行列待ち)数が大きくなってしまう時に、負荷が高くなった状態になります。
これを防ぐには、webサーバーのプロセス数の上限値をキチンと把握しておいて、その値を超えた時に監視アラートをメール送信するなどの処置が必要です。
あと、LA(LoadAverage)値も、最低でも5分おきの平均値監視を行い、値がCPUの数を超えていた場合に、サーバーが悲鳴を挙げているという事を見つけてあげる必要もあります。
こうしたサーバー管理は、webシステムにおいて、非常に重要な作業なんですが、多くの会社でこの作業が軽視されて行われていないという事実もあるんですよね。
AWSなどのクラウドサーバーであれば、こうした監視機能が備わっていると思うので、アラート設定をちゃんとするだけでまかなえます。
プログラミング負荷についてのまとめ
今回は、webシステムを構築する場合に知っておく必要がある内容をブログに書いてみましたが、とにかくプログラミングは負荷との戦いでもあります。
コンピュータは正直なので、プログラミングに書かれた通りのことを忠実に実行してくれますが、それが良いか悪いかの判断はしてくれません。
その判断は、そのプログラムを使う人が実際にすることになるので、想定外の反応が返ってくる場合は、想定が足りていないとしてプログラミングに向き合うしかありません。
「このシステム遅い」と使う人から言われた時、あなたならどのように考えますか?
使う人が悪い?、使っているコンピュータや環境が悪い?、作ってあげたんだから文句を言うな?
まあ、多くの場合、プログラミングをもっと良くしますという解答が正解になるでしょう。
短気な人は、プログラミングに向いていないとよく言われるのは、この辺でも重要な要素だからかもしれませんね。
コンピュータ負荷とキチンと向き合えば、プログラミングが楽しくなります。
プログラミングが楽しくなると、コンピュータ負荷が魅力的になります。
この状態になると、プログラミング能力が日進月歩で向上していくでしょう。
どうすればこうなれるかは、あなたの考え方次第ですよね。
0 件のコメント:
コメントを投稿