パスワードを忘れた? アカウント作成
177091 story
地球

PHPはエコじゃない? 113

ストーリー by hylom
開発・保守サイクルまで入れるとどうなるんだろう 部門より

あるAnonymous Coward 曰く、

FacebookではPHPを使いユーザデータを生成しているが、これをC++に換えれば大規模な省エネを実現できるとの試算があるそうだ(本家/.記事より)。

Facebookのサーバーパークでは30,000のサーバーが稼働しているそうだが、例えばこのうち25,000でPHPが走っているとして、C++の方が10倍効率がよいと考えれば22,500のサーバーが不要になるという計算だ。これは49,000トンのCO2削減を実現できるということでもあるという。

Facebookのみならず、PHPインタプリタが走っている世界中のサーバー数を考えると、環境への影響は小さいとは言えないそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 前からわかってますよ (スコア:5, すばらしい洞察)

    by 130R (31126) on 2009年12月22日 14時49分 (#1692700) 日記

    だから、富豪的プログラミングって言ってるじゃない

  • by Anonymous Coward on 2009年12月22日 14時50分 (#1692702)

    Cシェパードが登場するのですね。

  • そうだというなら (スコア:5, すばらしい洞察)

    by mu (9770) on 2009年12月22日 17時06分 (#1692783) 日記

    ここで,PHPなど使わずにC++で書き直せ!と考えるか,PHPをもっと最適化しよう!と考えるか?が一つの分かれ目なのだけど,PHPは,プログラマのコストを大幅に削減していると言えるのだから,やはり,後者がGeekのあるべき姿なのではないか.

    • by AnomalousCoward (32957) on 2009年12月22日 22時47分 (#1692942) 日記

      プログラマのコストを大幅に削減って、
      プログラマ個人の負担を少なくしているって意味なのか、
      単価の低いプログラマで開発させられるって意味なのか。

      後者には全面的に同意なんだけど、前者はどうなんでしょう。
      個人的にはPHPの開発やっててJavaやC#のような強い型付け言語
      と比べて楽だと感じられないんですよね。
      例外機能が弱いとかGenericsが無いとか言語機能も貧弱に感じるし。
      プログラマのコストを下げてる点ってどこらへんなんでしょ。

      むしろC++でもWebソリューションを開発しやすい
      プラットフォーム(ASP.NETのような)を作るほうが素敵に思える。

      --
      ごめんなさい。
      親コメント
  • by Anonymous Coward on 2009年12月22日 14時31分 (#1692688)

    20年前ならどちらが速い(実効速度ね)で、 インタプリタ vs コンパイラ、 アセンブラ vs コンパイラ、 の怒号が飛び交っていたもんだが。

    そうですか、今は CO2 で測るんですか。

    • Re:これが20年前なら… (スコア:2, すばらしい洞察)

      by bakuchikujuu (16666) on 2009年12月23日 9時55分 (#1693093) ホームページ 日記

       そもそも、「~トンのCO2」ってのが胡散臭い。ジュールでいいだろ、と思う。「~トンのCO2」という表現の一番の問題は、多いのか少ないのかよくわからない事。
       例えば36kWhとか130MJとかの表記なら量がわかるけど、20kgのCO2だなんて表記ではよくわからん。あえてわかりにくくしているんだろうと邪推している。
      #上記は、50W×24時間×30日の例。22円/kWhなら電気代は800円。

       元記事では、最初のあたりで係数を掛けて
      > In the USA, an average of 560 grams CO2 is emitted per generated Killo Watt hour
      CO2に換算して計算しているけど、最後までジュールでいいだろ。

      親コメント
  • コードキャッシュやパース処理もしないシステムなんて、あるのだろうか。
    インタプリタをバカにしてはいけない。
    • コードキャッシュや事前パーシングぐらいじゃ
      実行速度の向上率は精々300%ぐらい。大したことないよ。
      http://php.y-110.net/wiki/index.php?PHP%A1%A7eAccelerator%20%A4%C7%20P... [y-110.net]
      インタプリタをバカにしてはいけない、というなら
      せめてネイティブコードへのJITコンパイルぐらいしてくれないと。

      でもそこまでやっても結局、非コンパイル型の動的言語って全部遅いんだよ。
      結局変数をスタックに置くのと、ヒープに置くのじゃメモリアクセスが
      最低一回分違うわけで、このペナルティはスクリプト言語である以上回避できない問題だ。
      あと、特にPHPはrequire周りとOOP機能を使った時のパフォーマンスが悪い(実感として)。
      .NET VMで動くC#ですらPHPに対して完全勝利してるんだから、
      PHPでいくら頑張っても最適化処理をちゃんとやったC++の足もとにも及ばない。

      もちろん、PHP開発にはPHP開発の利点があるのは事実だが、Facebookほどに
      利用者数が膨れ上がったシステムを全部PHPで済まそうってのは
      非エコって言われてもしょうがないと思う。

      ただ、PHPとC++を併用とか大変だから、C#+ASP.NETみたいな
      両方の良さを兼ね備えた素敵フレームワークが生まれたんだろうね。

      --
      ごめんなさい。
      親コメント
  • なにが最適? (スコア:2, 参考になる)

    by Anonymous Coward on 2009年12月22日 15時06分 (#1692718)

    だからこそPHPでよりCでの方が効率が良い物に対してPECLというライブラリがあるわけで
    DB接続に関しても各DB関数のラッパーのPEAR::DBやPEAR::MDB2ではなくて処理的効率が良いPDOがあるわけで・・・・

    それにしてもコンパイル型言語の方がそりゃインタプリタ型の言語より処理効率がいいのは分かり切っていることだけど
    CやC++で処理書いてサーバと同じクローン環境(基本的には本サーバと同じバージョンのライブラリなど)を作ってと考えると開発が非効率。
    その点Perl/PHPなどのスクリプト言語だとWindows環境でもテスト環境は構築できるから開発環境とテスト環境を同じにすることはできる。(ただしパーミッションやファイルロックなどはWindows系だとテストしきれない)
    でそこでJavaって話がでてくるわけで。

    • by Ryo.F (3896) on 2009年12月23日 2時42分 (#1693035) 日記

      CやC++で処理書いてサーバと同じクローン環境(基本的には本サーバと同じバージョンのライブラリなど)を作ってと考えると開発が非効率。

      VMwareでも使えば解決できそうだけど。

      親コメント
  • by Anonymous Coward on 2009年12月22日 17時56分 (#1692808)

    個人的にも嫌いだし意味が解らないんですよ。「省エネルギー」「エネルギーの節約」でいい
    じゃないですか?

    21インチで消費電力100W以下から、50インチ以上の大型テレビに買い換えても、エコポイント
    が付いたり。公共交通機関を使って自家用車を所有していない人には付かないエコポイントが、
    ハイブリッドカーを買った人には付いたり。エコ灯油やそのほかエコ○○と称している、何が
    エコなんだか解らない商品にもゲンナリします。

    エコはみんなが適当に使ったせいで言葉として腐敗してしまったと思います。出来れば使わな
    い方がいいですよ。

  • by Anonymous Coward on 2009年12月22日 20時10分 (#1692859)

    PHP研究所が出版したら吹くぞ

    まあ、こんな本 [php.co.jp]やこんな本 [amazon.co.jp]をPHP研究所から出るとは松下幸之助も予想しなかったに違いない。

  • by Anonymous Coward on 2009年12月23日 0時18分 (#1692988)
    PHPってテキトーに書いてもそれなりに動くので、開発コストは低いと思う。
    ただ、プログラマによって書き方がバラバラなので、保守を引き継いだ人は
    えらい大変な目にあうような…

    オープンソースと商用のデュアルライセンスのアプリを一時期使うことがあったけど、
    「よく金を取る気になるなー」ってコードが満載で、会社でまともに使えるまでには
    相当のデバッグが必要だった。
    フィードバックしてもぜんぜん反映してくれないし、さっさと見切りをつけて、
    Javaあたりで書き直した方が早いって思った。
    #会社で導入したので、そうは行かなかったけど

    コーディング規約で固めてプログラマの差異を無くせば保守コストは下がると思うけど、
    規約でガチガチに固めているならどの言語でも開発コストはさほど変わらないような…
  • by rin_penguin (9144) on 2009年12月22日 14時41分 (#1692697)

    プログラミング分野に関わったことがないのでエロい人に教えてほしいのだが、

    > C++の方が10倍効率がよいと考えれば

    という仮定は妥当なの?

    • Re:10倍? (スコア:2, 興味深い)

      by Anonymous Coward on 2009年12月22日 16時14分 (#1692754)
      単純に計算処理だけで見た場合たぶん30倍ぐらい(キャッシュなし)なデーターをみたことがあります。
      だけど普通ボトルネックになるのはCPUではなくIOなので、webサーバーには効果あるけど
      DBがひっかかって純粋に1/30にはならないと思う
      親コメント
    • Re:10倍? (スコア:2, 興味深い)

      by shiroiwanisan (12855) on 2009年12月23日 23時18分 (#1693308) 日記
      ちょっと前に、JSON.php というphpで書かれたJSONのクラスを、
      php_jsonというモジュールに置き換えたら、90秒以上かかってい
      た処理が、1秒以内で終わるようになった。

       私は、phpは詳しくないので、JSON.phpを書いたプログラマが
      どのレベルか分かりませんが、IOがない処理だとそういうことも
      あるということで。
      親コメント
    • Re:10倍? (スコア:1, 興味深い)

      by Anonymous Coward on 2009年12月22日 14時59分 (#1692710)
      10倍以上効率がいいような気もする。

      しかし、C++よりCの方が2~5倍くらい効率がいいかもしれない。
      アセンブラで書けばさらに効率がいいってことにもなりかねないような。

      一方で、C++、C、アセンブラの順で開発効率が落ちるわけで、効率が落ちた分の
      損失も含めて議論しないとなんないですね。
      親コメント
    • by s-tomo (2841) on 2009年12月22日 16時29分 (#1692762) ホームページ 日記

      PHPで配列にデータを読み込んだら読んだデータの10倍くらいのメモリ消費になったのでだいたい合ってると思う。

      # 記事の方、CPU効率だなんて言ってないよね?

      親コメント
    • by reininn (35924) on 2009年12月22日 16時33分 (#1692767)
      良くわからんが
      作成コストが100倍かかるのは事実だよ。
      親コメント
    • by goji (949) on 2009年12月22日 22時44分 (#1692940) ホームページ 日記
      ペンチマーク的なロジック主体のコードなら10倍くらいの実行性能差が見込まれるのは妥当。
      しかしながら、Webシステムなどで頑張ってるのはDBエンジンなので、C使おうがperl使おうがそんなに差は出ない。
      そういう性能的な要求が出る部分だけ、メッセージングミドルウェアとかを使ってサービスとして分離するのが良いと思う。
      親コメント
      • Re:10倍? (スコア:3, 参考になる)

        by goji (949) on 2009年12月23日 2時28分 (#1693033) ホームページ 日記
        帰宅したのでちょっと面白いベンチマークを貼っておきます。
        Computer Language Benchmarks Game [debian.org]
        縦軸が実行に要した時間、横軸が同じアルゴリズムを記述するのに要したコードサイズになっています。
        やはり、まだ静的にコンパイルするCとかが速いが、Java VM など最近の JIT コンパイルも強力。
        関数型言語や Lisp が意外に頑張ってる。
        JavaScript, PHP, Python など LL 言語は似たような特性だが、Ruby はもう少し頑張って下さいってところだろうか。
        親コメント
  • CPU で10倍の効率が得られたとしても、ネットワークがついていけるのだろうか?
    • 10倍の効率で「今の設備で10倍のアクセスを捌ける」ってのならネットワークが問題になるでしょうが、「今と同等のアクセスを捌くのに1/10のサーバ設備で済む」ってほうの話なので、ネット負荷は変わらないのでは?
      親コメント
  • インタプリタで走らせるより何倍か効率よくなると思うんだけどそういう選択肢はないの?
    • まあ、あるといえばあるらしいんだけど、
      http://www.roadsend.com/home/index.php?pageID=compiler [roadsend.com]

      PHPってif文の中でrequireできてしまう言語だから
      変数を全部ヒープに置かなきゃいけなくなるだろうし、
      arrayは配列ではなくてハッシュになってしまうわけで、
      結局Zend Engine的なものを持たなきゃいけなくなるだろうから、
      やはり限界はあると思う。
      上のroadsendも
      http://sspp2nd.blogspot.com/2006/12/roadsend-compiler-for-php.html [blogspot.com]
      によると実行速度3倍程度らしいから、eAcceralatorとかより
      多少マシ、ぐらいじゃない。

      本家のベンチマークも思ったより速くない。↓
      http://www.roadsend.com/home/index.php?pageID=benchmarks [roadsend.com]

      結局、実行時のパフォーマンスでいえば静的型付言語には
      動的型付言語じゃかなわんと思われ。

      --
      ごめんなさい。
      親コメント
      • 昔、処理速度を上げたかったとき、コメント文や空行を省く+変数名単純化の痩せ薬programつくって通したら、15%ほど処理が早くなった。
        1週間の処理が5日ほどで終わって嬉しかったなぁ。
        「コンパイラがあればこんなこと」と思ったけど、Zendの買う金がなくて (- -);
        Optimizing PHP のコンパイラなんがでるといいんだけど。え、あるのかな。

        --
        case文より ifのふるいの方が早かった。
        親コメント
  • by Tsann (15931) on 2009年12月23日 8時28分 (#1693070)

    Facebookについては全く知らないので的外れかもしれないけど、ここまでAjaxについて言及ないですね。

    Ajaxを使うことでブラウザ側に一部の負荷を移すことができますよね。大規模なWebシステムでは必須じゃないかと思ってます。Facebookも使ってるらしい。
    じゃあ、Ajaxなリクエストに対してPHPで応答するアドバンテージってどれほどあるんでしょ? そこはC++でいいんじゃない、と言うなら納得できるんですが。

    日本で言うと…2ch? あれってAjaxとは無縁ですよね。datとかあるけど…。

    • Re:Ajaxとか (スコア:1, おもしろおかしい)

      by Anonymous Coward on 2009年12月23日 9時28分 (#1693085)
      > じゃあ、Ajaxなリクエストに対してPHPで応答するアドバンテージってどれほどあるんでしょ? そこはC++でいいんじゃない、と言うなら納得できるんですが。

      Ajaxでクライアント側に負荷を移したんならサーバは軽くなるわけで、それならなおPHPでいいじゃん。
      親コメント
typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...