こないだ作った簡易Webサーバーをマルチタスク化するよ。articlesこないだ作った簡易Webサーバーをマルチタスク化するよ。RepliesTweet前回やったクライアント毎にプロセスを作成の続きで、今回はクライアント毎にスレッドを作成です。forkと同じ感じですんなり終わるかなあと思ってたんですが、ところがどっこいだいぶ時間がかかりました。今回もEchoじゃなくてWebサーバーですが、いたるところで修正が必要で始めは全然動かずでした。ポイントになったのはclose(SOCKETNAME)と、pthread_joinの2個でした。本書ではpthread_detachを使ってるんですが、pthread_joinの方が合うんじゃないかと思って変更しました。あとはThreadArgsについての情報がウェブ上にも少なくて大変でした。プロセスを増やして処理をさせる場合と、スレッドで処理することの違いについて簡単にまとめますとプロセスを生成する場合、生成するたびにメモリ、スタック、ソケットなどをコピーして、子プロセスが処理します。まるっとコピーする必要があるわけですな。スレッドの場合は1個のプロセスで複数タスクが処理ができて、アドレス空間を共有するので、コストが安くなるという利点があるようだ。前になってしまうけど、ApacheのMPMに凝ってたときにやりましたが、Workerは静的なサイトをたくさん処理させるのに向いているということにも一致するね。スレッドの実装に関しては、本書を参考にしているので同じくPTreadを利用します。ほかにもいろいろあるらしいですが、POSIXならだいたいのOSに入っているからという理由だそうです。Donahoo氏のウェブサイトを参考にしてください。参考サイトとして載せています。port);こういうのが移植性が高いというのか、前回と同じくウェブサーバーの動作の部分になる、「HandleTCPclient改」と「GETHTML」についてはほとんどさわらずでmain関数の部分をいじくったところが多いです。return(NULL);}あとはデバッグをしていた時に処理が変なところで止まったりしていたので、Debug用にprintfをいろんなところに入れて停止のタイミングを確認しました。}gdbで同じことができるので、わりと簡単な方法なんでやっちゃいました。#defineのところはいまいちよく分かってません。サーバー側で動かして、ウェブからアクセスした時の動作は下のような感じです。1回アクセスした後は、「いくら」の表示で止まります。acceptで待ってるってことですね。~]#socnetについて思い返してみます。→accept・接続待機という事でしたので、これと一致しますね。スレッドなので何回リロードしても、プロセスの数は増えない。ブラウザから同時に3つアクセスしてみたら、スレッドIDが増えるだけでプロセスは1個の状態が続きました。懸念点は、動作するプログラムはできたけれど、Pthreadについての勉強が足りていないことや、Defineで定義しているものはとりあえず書いただけ(笑)なとこ。スレッドでこんなに時間がかかるとは予想していなかったので、ちょっと驚きでした。こんどApacheのMPMを例にして、勉強してみたいと思います。次で最後になります制限つきマルチタスクですね。ソケットプログラミングC言語編をやるためにC言語の勉強をしてきた訳ですが、最初は呪文のように見えたソケットプログラミングも、サンプルコードを使って、自分で構成したりまでは、できるようになりました。Perlが、これまた厄介でC言語と日本語と英語くらい違っててwそろそろPerlの方をしっかりやりたいと思っているんだけど、もうちょっとだけ続くのじゃってやつで、もうちょいC言語を続けようと思ってるんだな。Posts:こないだ作った簡易Webサーバーをマルチタスク化するよ。(3)TCPEchoサーバーから超簡易TCPwebサーバーを作ってみた。こないだ作った簡易Webサーバーをマルチタスク化するよ。こないだ作った簡易Webサーバーをマルチタスク化するよ。“こないだ作った簡易Webサーバーをマルチタスク化するよ。gdbで同じことができるので、わりと簡単な方法なんでやっちゃいました。#defineのところはいまいちよく分かってません。定義が追加で公開される。PM>かぼちゃさんコメントありがとうございます。>おそらく普通にプログラムを書く上では不要かと思います.>書籍など読者がどのような環境でコンパイルしようとするか予測できないから明示的に>示しているのではないでしょうか.なるほどっすね。記載いただいた参考サイトに>公開される定義を制御することができる。そんな感じなんだなで終わらせておきます(笑)三十六計も大事ですよね。week.SSG5をいじれる状態まで設定しようAndroidの開発でC++のコードを使うにはHTTP2.0がやってくる?HTTP1.1、HTTP1.0の勉強をしておこうか。GUIな環境を入れるよさくらのスタンダードサーバーにRailsをインストールしてみる。ntopApacheのmod_proxyを使ってみるLANポートが埋まっちまったんで、SSG5をL2透過のスイッチにしてみた。Comments【Ubuntu】UbuntuServerをコンソールからデスクトップ画面で操作する。さくらの新スタンダードプランのサーバーにRailsを入れて、Redmineをインストールした。for:このブログはさくらのクラウドで動いてます。