ホームページ  >  記事  >  バックエンド開発  >  PHP データベース アクセスに関する質問のタイトルは長くする必要があります。

PHP データベース アクセスに関する質問のタイトルは長くする必要があります。

WBOY
WBOYオリジナル
2016-06-23 13:39:091045ブラウズ

私はいくつかの質問に苦労しています
まず、ブラウザがサーバーにリクエストを送信すると、サーバーは対応するリクエストを処理する新しいスレッドを作成してブラウザに返すのでしょうか?
2 番目に、
次のコードにアクセスすると

<?php$con = mysql_connect("localhost","peter","abc123");if (!$con) die('Could not connect: ' . mysql_error()); $strsql="SELECT * FROM `gbook`"; // 执行sql查询$result=mysql_db_query("database", $strsql, $con);// 获取查询结果 $row=mysql_fetch_row($result);?>

その後、サーバーはこのコードを実行する新しいスレッドを作成し、データベースのリンクとクエリを実行します
次に、1 分以内に N 人のユーザーがアクセスすると、N 個のスレッドを作成し、この 1 分間にデータベースに N 回接続しますか?
ウィンドウの下で、mysql_connect 関数は .dll ダイナミック リンク ライブラリを呼び出す必要があります。この場合、各ユーザーはデータベースにアクセスするたびに再接続する必要があります。これは効率的ですか?これらのスレッドは依然としてデータベース リンクを共有しています。 。 。
私は初心者です、私を批判しないでください、


ディスカッションに返信(解決策)

誰も答えませんでしたか? 。 。うん。 。 。うん。 。 。ええと

は新しいプロセスです...

ユーザーが Web ページにアクセスすると、mysql は接続を作成します。

1. セッションの独立性を確保するために、各 http セッションは独立したプロセス (スレッド) を占有します。
2. ダイナミック リンク ライブラリは、各ユーザーに一度だけロードされます。誰がそれを使用するか 各プログラムはそのプログラムへの接続を生成します
3. 複数のプロセス (スレッド) が接続を共有すると想像すると、それは不可能ではありません。ただ、各受信 (スレッド) プロセス間のスケジューリングは非常に複雑になります。データ フローが傲慢でないことを確認するために、どのように識別する予定ですか?

では、短期間に 10,000 人がサーバーにアクセスすると、10,000 個のスレッドが作成されるのでしょうか?さらに、各受信 (スレッド) プロセスのライフ サイクルにはユーザーのみがアクセスします。サーバーはこの短期間で応答しますか?
各プロセスにはデータベースへの独立したリンクがありますか?
たとえば、 $con = mysql_connect("localhost","peter","abc123"); このリンク関数はローカル データベース リンクを確立するのに時間がかかりますか?

従来の Web サーバーは確かにリクエストとスレッドであり、処理後に解放されます
HTTP プロトコル設計の目的は、Web の軽量かつ高同時実行性のニーズを解決することです
nginx はスレッドをオープンしていないようです、よりパフォーマンスの高いソリューションもあります 興味がある場合は、Baidu にアクセスしてください
データベース接続もスレッドに依存しません
しかし、現在、多くの場所でメモリ プールやスレッド プールなどの「プール」が使用されています
これは、追加のサービス層を追加することを意味しますN 個の接続を確立した後、ハンドルを保存して保持します。サーバーがデータベースにアクセスする場合は、既に接続されているハンドルを直接使用し、使用後に元に戻します。解放してください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。