C言語のCGIを語りつつ普及するスレat PHP
C言語のCGIを語りつつ普及するスレ - 暇つぶし2ch494:普及された人
09/03/22 17:50:13 uHOLJ9Dp
>>493
素晴らしい財産の数々、驚きました。
確かに、これら全てを改変するというのは重労働ですね。
でも、それ以前にこれらを作ってきたことが、とてつもない重労働です。
私には、高い品質で世に(無償)提供したいものがありますので、いくつかのものは作りましたが、かなり多くのそういった財産を作っていかないといけません。
今まで、492さんがやってこられた重労働です。
それをやることに比べたら、一つ一つのコードのメモリ開放型への変更は、基本的にはオブジェクト指向でないC言語で、これまでやってきた492さんにとっては、克服できるのではないでしょうか。
module型やFastCGI用にするとなると、確かにそれ専用で設計した方が良いものが結構ありますので、この際せっかくですので、一括でドン!ではなく、後世に残る財産と思ってチマチマやってみてはいかがでしょうか?
これだけできる人ならきっとすぐにできると思います。
私も始めた当初は、スクリプト言語で同じものを作る100倍以上の時間がかかっていましたが、今では2倍程度の時間しかかかりません。
せっかくのC言語でCGIですので、より高い品質のものを期待しています。
・・・というか、492さんは全盛期のYahoo!にでも勤めてた(る?)のでしょうか???

495:nobodyさん
09/03/23 02:32:56
>>494
私もこのAPIをもうちょい作り込んで、オープンソースででも公開したいんですが、
すでにいくつかの大手サイトで使っちゃってるので、
ソース公開してセキュリティホールが見つかったら怖いので、公開に踏み切れないw

> ・・・というか、492さんは全盛期のYahoo!にでも勤めてた(る?)のでしょうか???

ずっとフリーで活動してますよ。
でも最近は仕事が激減して、暇を持てあまし中 orz

496:nobodyさん
09/03/23 17:53:50
CGIをC言語で書いているので、FastCGI + C の組み合わせにも興味あるけど、いまいち仕組みが
理解できなくて移行をためらっているので、もし良ければ質問に答えてもらえるとありがたいです。

CGIをFastCGIにすると、プロセスがメモリに常駐してFCGI_Acceptのループでリクエスト待ちになる
みたいだけど、このとき複数のリクエストが同時に来たらどう対応されるの?

1. 一つのFastCGIのプロセスで順番に処理される
2. FastCGIのプロセスが新たに立ち上げられて、並行して処理される

"1" ならアップローダーみたいな処理に時間のかかるものにはFastCGIは向かないって認識でいいのかな?
(そもそも処理に時間がかかるなら起動コストの影響は少ないからノーマルCGIでいいのだろうけど)

"2" ならせっかく常駐するのだから、データの内容をメモリにキャッシュして高速化しようとかすると、
複数立ち上げられたときにメモリを大量に消費しちゃうのでやらないほうがいいのかな?

試してみればいいのだろうけど、FastCGIに興味はあるけど今のところはC言語CGIだけでもCPU負荷で
困ることはなかったので、環境構築するところまでは踏み切れずにいました(^^;

497:nobodyさん
09/03/25 15:31:05
fastcgi は、基本的にはリクエストが来たら余っているプロセスがあればそれを使い、
なければ立ち上げるってだけ。

プロセスの生死自体は親が握っていて、同じインスタンスが同時に動くことがある
ってのを覚えておけば、データをメモリにおいて使いまわすことは可能。


っていうかLinuxとかのOS標準のdevパッケージを使うなら、Hello, worldなcgi自体は
環境構築含めて15分もあれば出来るので、めんどくさがらず試せばよろしい。


498:普及された人
09/03/26 22:41:51 4YbFu+ij
>>495
これだけの実力者が暇を持て余しているとは、世の中狂っています。
これだけの実力者なら凡人がRubyで3000ステップの素晴らしいプログラムを作る時間で、10000ステップの同等の機能の素晴らしいプログラムを作るでしょうに。
早く、プログラマのフリーエージェント的な制度が確率すると良いと思います。
力のある人が、それなりの報酬を得られることは必要です。
それがなければ、努力もせずダラダラとIT業界に執着する人が増えるばかりです。
オープンソース化できるのなら是非してもらいたいです!
それこそC言語でCGIの普及になります。
> ソース公開してセキュリティホールが見つかったら怖いので、公開に踏み切れないw
だからこそオープンソースで良いのではないでしょうか?
一人の力には限界がある。
だからこそ、みんなの目で見てもし穴があるのなら、みんなで埋めていけば良いのだと思います。
完璧なものを公開して、威張るためのものがオープンソースではないと思います。

499:普及された人
09/03/26 22:43:44 4YbFu+ij
>>496
私が自分自身で言っていることと相反するようですが、495さんもおっしゃってたように、実動作では通常のCGIでも、キャッシュ化されますのでかなり高速です。
C言語の場合、処理自体が早いですから。
理論的に考えるとかなりの差ですが、実動作で考えると多くの場合FastCGIと通常のCGIの差は、「プロセスの生成」と「プロセスの廃棄」の時間になるかと思われます。
それと、昨日事情があって、Rubyの全コード見てみましたが、、、
素晴らしいプログラムで、感想は色々ありますが、とにかく長いですねぇ。。。
C言語のソースだけで、30ファイルくらいありますから、普通に流しで見るだけで4時間くらいかかってしまいました。
あのプログラムがインタプリタとして、スクリプトを読み込み処理することを考えると、遅いのが良く理解できます。
どれだけでかいWebアプリケーションをC言語で作ったとしても、あれほどでかくはなり難いので、間違いなくC言語で作ったWebアプリケーションは高速でメモリも食いません。
そう考えると、C言語のCGIだけで困っていないのなら、それでも良いかと思います。
ただ、多少の苦労で、無料で簡単に高速化できることは間違いないですし、多少のスキルアップにもなるかとも思いますので、是非一歩を踏み出して欲しいと思います。
RailsもRackをデフォルトとして一生懸命「単純化」や「高速化」を目指しています。
それよりも高いレベルのものが手の届くところにあるのですから、掴んじゃいましょう!
「手間がかかっても、面倒くさがらず、納得のいくアルゴリズムを完成させる」
「少しでも可能性があるのなら、より素晴らしいものを作るために努力を惜しまない」
それがC言語技術者だと思います。
色々相性など言われていますが、少なくとも私はApache & mod_fastcgiでとても安定動作しています。
やってみてダメなら戻せば良いのではないでしょうか?
で、仕組みに関して私のわかるレベルで、解説ページを作ってみました。
急いで作ったので、おかしいかもしれません。
間違いがあれば、ご指摘ください。
URLリンク(www.dreamhope.net)

500:nobodyさん
09/03/27 13:34:24
>>497-499
ありがとうございます。おかげでFastCGIを使ったときのイメージが理解できました。
FastCGIは興味があったけど、試してみるのが面倒というよりは、試してみるとのめり込んでしまいそうで
目の前にあるやらないといけないことをおろそかにできない状況だったので試せなかったのです。
元々はアセンブラでプログラムを組むのが趣味だったような人間ですので、手間よりも高速化が好きですから
今後は少しずつFastCGIも利用していきたいと思います。

501:nobodyさん
09/03/31 09:58:41
>>500
高速化にこだわるなら、自分でアプリケーションサーバ書くのがいいのでは
Apache臭はするけど、libaprなんかを使えばOSポータブルなdl()とかスレッドとか
メモリプールとか基本データ構造とか入っててお得ですよ。
ま、それなりにデカいけどね。


502:普及された人
09/03/31 22:35:52 Tx3EmaFc
この掲示板に出現する人は「C言語でCGI」をいかに、、、というのが目的ですし、
CGI部分を作るだけでも創造を絶する時間がかかりますので、アプリケーションサーバから作り始めるのは大変です。
今は情報が出回っていますので、作るに無理なことはないとは思いますが、一人で仕事外の時間利用だけで考えると、私ですと5年以上はかかりそうです。
Webアプリ一つ作るのにそれは効率的ではありません。
それにlibaprは、別にWebアプリケーションが高速になるものでもありません。
遅くなる可能性はあるけれど、作るときに便利で楽になるAPIだと思います。
C++技術者でない純粋なC言語技術者は、あまり使わないAPIだと思います。
使わざるを得ないAPI以外は、基本的に存在を知らなければすぐに自作してしまいますので。
「C言語が使える」ということは、別段便利なAPIを使う必要がないということでもあります。
libaprでメモリプールしなくとも、必要な分だけスレッドを立てて、mallocやcallocだけでしっかりメモリ管理できるということでもあります。(時に失敗しますが)
おまけにlibaprのメモリプールは確保した領域をシステムに対して返却しないと記載されていましたので、逆にかなりコントロールしにくいAPIな気もします。
それだけの手間(時間)をかけ、なおかつメモリ周りも適当な設計で良いのなら、普通にC言語でApache module型Webアプリケーションでも組んだ方が楽で高速で良いのではないでしょうか?

503:nobodyさん
09/04/01 11:08:56
作る際の効率が問題なら、そもそもwebアプリでCは選択しちゃダメ。
5年って、アナタたぶん作ったことないから死ぬほど安全に見積もってるよね?
アプリケーションサーバって、そこまで作るの大変じゃないよ。やることは基本的に待つだけだし。
実際は余暇を二週間位でも最初のプロトタイプ位はできるんじゃ...
まぁ、既存の適当にかかれたCGIをスレッド対応にするのは骨がおれると思うけど。

libaprのメモリプールの返却云々については、apr_pool_create の第二引数参照。
作業とか、ループとかにサブプールを作って、必要なメモリはそこから確保して、
終わったらサブプールだけ開放するって感じで。

でも、確かにCGIじゃないのでもうやめます。
fastcgiもCGIじゃないのではって気するけど...


504:nobodyさん
09/04/02 22:00:32
C言語が向いてるのは、開発費が多少増えたとしても、
サーバ台数が抑えられるから、トータルコストが安くて済むような案件だね。
検索サーバとか、2chとか、アクセス数が多いサイトとかね。

505:普及された人
09/04/04 11:18:37 JlRZ3FIj
>>503
はい、もちろん作ったことはありません。
それに、今までのところでは作る必要性も感じたことはありません。
私がC言語で既存のAPIを利用せずにアプリケーションサーバを作ることを考えると、、、
FastCGIのようにアプリケーションサーバ(これはハードのことです)側にある複数のTCPクライアントCGIと通信をこなしながら処理を進めることや、
アプリケーション側に、どのようにどのくらいのメモリを与えるのかなどを考えると、
できるだけ汎用的なものにしようとすれば、TCP先で利用できるlibaprのようなAPIを自分で作らないといけないし、、、
というような感じで、503さんとは少し論点がずれていたようです。
すみません。

だた、やっぱり基本的な考え方としてはFastCGIは
(Client → WebServer → FastCGI → CGI → FastCGI → WebServer → Client)
という形態ですので、アプリケーションサーバもFastCGIとほぼ同じで、
(Client → WebServer → AppServer → App → AppServer → WebServer → Client)
という形態になり、module型
(Client → WebServer(module型App) → Client)
の方が構成がかなり単純ですので、C言語で作ったCGIやAppの反応はかなり高速だと思います。
それに、やっぱりmodule型のC言語Appを一つ作る方が、
アプリケーションサーバとクライアントアプリケーションの両方を作るよりも遥かに楽だと思います。
それ以上に、FastCGIであれば、
FastCGI用C言語CGIを一つ作れば済みますので、労力は激減します。
ただ、やっぱりアプリケーションサーバはもとよりmocule型AppもCGIではありませんね。

あと、FastCGIはCGIプログラムをメモリ上に常駐させるのかさせないのかという違いで、基本的な仕組みはCGIと同じと考えて良いと思います。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch