私はいくつかの質問に苦労しています
まず、ブラウザがサーバーにリクエストを送信すると、サーバーは対応するリクエストを処理する新しいスレッドを作成してブラウザに返すのでしょうか?
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);?>
誰も答えませんでしたか? 。 。うん。 。 。うん。 。 。ええと
は新しいプロセスです...
ユーザーが Web ページにアクセスすると、mysql は接続を作成します。
1. セッションの独立性を確保するために、各 http セッションは独立したプロセス (スレッド) を占有します。
2. ダイナミック リンク ライブラリは、各ユーザーに一度だけロードされます。誰がそれを使用するか 各プログラムはそのプログラムへの接続を生成します
3. 複数のプロセス (スレッド) が接続を共有すると想像すると、それは不可能ではありません。ただ、各受信 (スレッド) プロセス間のスケジューリングは非常に複雑になります。データ フローが傲慢でないことを確認するために、どのように識別する予定ですか?
では、短期間に 10,000 人がサーバーにアクセスすると、10,000 個のスレッドが作成されるのでしょうか?さらに、各受信 (スレッド) プロセスのライフ サイクルにはユーザーのみがアクセスします。サーバーはこの短期間で応答しますか?
各プロセスにはデータベースへの独立したリンクがありますか?
たとえば、 $con = mysql_connect("localhost","peter","abc123"); このリンク関数はローカル データベース リンクを確立するのに時間がかかりますか?
従来の Web サーバーは確かにリクエストとスレッドであり、処理後に解放されます
HTTP プロトコル設計の目的は、Web の軽量かつ高同時実行性のニーズを解決することです
nginx はスレッドをオープンしていないようです、よりパフォーマンスの高いソリューションもあります 興味がある場合は、Baidu にアクセスしてください
データベース接続もスレッドに依存しません
しかし、現在、多くの場所でメモリ プールやスレッド プールなどの「プール」が使用されています
これは、追加のサービス層を追加することを意味しますN 個の接続を確立した後、ハンドルを保存して保持します。サーバーがデータベースにアクセスする場合は、既に接続されているハンドルを直接使用し、使用後に元に戻します。解放してください