ホームページ >バックエンド開発 >PHPチュートリアル >(転送) 興味深い記事: I am a thread、興味深い記事 I am a thread_PHP チュートリアル
From: Coder Transformation (WeChat ID:coding)
作者: IBM Liu Xin
私は生まれたときに番号 0x3704 を割り当てられ、暗い部屋に連れて行かれ、そこで私と全く同じ仲間がたくさんいました。
私の仲間 0x6900 は長い間滞在し、人生の浮き沈みを感じながら私にこう言いました。
私たちのスレッドの運命はパッケージを処理することです。 荷物を扱ったらすぐにここに戻ってこなければ、二度と戻って来れないかもしれません。
迷っています、パッケージ、どのパッケージですか?
「心配しないでください、すぐにわかります、私たちはここでは怠け者を気にしません。」
案の定、それから間もなく、家のドアが開き、強面の男が叫びました。
"0x3704、出てきて!"
出てくるとすぐに重い荷物を詰め込まれていて、中には説明書が書かれた紙が入っていました。
"「急いでこの荷物を処分してください。」
"どこに対処するか"
"指示に従って、まず準備が整ったワークショップに行きましょう"
案の定、地面に標識の矢印があり、それに従って大きくて明るい部屋に行きました。ここにはすでにたくさんの糸があり、まるでいつでも前に進む準備ができているかのように、とても緊張していました。
入るとすぐにアナウンスが聞こえました:「0x3704、ワークショップに入ります」
私が急いで前に進むと、私の後ろにいた多くの人が話したり、こう言いました:
「彼はとても幸運です。準備完了状態に入るとすぐに走ることができます。」
「それは重要ですか?」
「いや、彼らの優先順位がどれほど高いかを見てください、うーん」ここはとても美しいです。古いスレッドがいつもうるさいのも不思議ではありません。ここに永遠に居られたらいいのにと思います。
ここの空間は広く、景色は良く、空気は新鮮で、鳥はさえずり、花は香りが良く、これまで見たことのない人がたくさんいて、ウェイターのように私にサービスを提供するのを待っています。
それらには番号もあり、さらに重要なことに、それぞれにはハードディスク、データベース、メモリ、ネットワークカードというラベルも付いています。 . .
今は理解できないので、手順を見てみましょう:
ステップ 1: パッケージからパラメーターを取り出します
パッケージを開くと、中に HttpRequest オブジェクトがあり、userName とpassword の 2 つのパラメータを取得できます
ステップ2: ログイン操作を実行します
ああ、誰かがログインしようとしていたようです。私はデータベース担当者にユーザー名とパスワードを渡しました。彼はデータを受け取ってゆっくりと立ち去りました。
なぜ彼はそんなに遅いのですか?でも、とにかく3番目のステップを実行できないので、しばらくワークショップにいてもいいですか?
その時、作業場内のラジオが鳴りました:
「0x3704、私は CPU、実行している手順を覚えておいて、すぐにパッケージを持って出発してください。」
ゆっくりと荷物をまとめ始めました「他のスレッドがすぐに来るので、急いでください。」
このワークショップを出て、私たちは再び大きな部屋にやって来ました。そこでは、たくさんのスレッドがゆっくりとお茶を飲んだり、トランプをしたりしていました。
「お兄さん、何もする事ないんですか?」
「あなたはここに来たのが初めてです、私がデータベース サーバーからのデータを待っていることを知りません! 彼らは私たちよりも何十万倍も遅いと言われています。ここでゆっくり休んでください。」
「え?そんなに遅いの?誰かがシステムにログイン中です。そんなに長く待ってもらえますか?」
「心配しないでください、地球上の 1 日が CPU の 1 年に相当するということを聞いたことがありませんか? ここでは時間を測定するためにナノ秒とミリ秒を使用します。地球上の 1 秒は、私たちにとって数日に相当します。時間」
昼寝してください。どれくらい時間がかかったのかわかりませんが、スピーカーが再び放送を開始しました:「0x3704、あなたのデータはここにあります、実行してください」 振り返って CPU ワークショップに走ったところ、ここにいる人は出入りしかできないことがわかりました。
後ろから笑い声が聞こえた:「案の定、彼は新入社員です。待機するために準備ができた作業場に行かなければならないとは知りません。」 それで、私は準備ができたワークショップに急いで行きましたが、今回はあまり幸運ではなく、再びCPUワークショップに呼ばれるまで長い間待ちました。
待っている間、誰かがささやくのが聞こえました:
「聞いたことがありますか、最近スレッドが強制終了されました」
「なぜ?」
「この男は CPU ワークショップに留まり、CPU 使用率を 100% まで押し続けた後、殺されました。」
「殺した後はどこに行ったの?」
「ガベージコレクションされたのかもしれません」
私は心の中で震え、すぐに処理を続行し、さらにアクションブロックを受け入れ、ログインの2番目のステップが成功しました。
ステップ 3: ログイン成功後にホームページを構築します
このステップは少し時間がかかります。処理する HTML が大量にあり、誰がコードを書いたのかわからないため、処理するのが非常に面倒です。
緊張して HTML を作成していたら、CPU がビープ音を鳴らし始めました:
「0x3704、私は CPU、実行している手順を覚えておいて、すぐにパッケージを持って出発してください。」
「なぜ?」
「各スレッドは一定期間のみ CPU 上で実行できます。時間が経過したら、他のスレッドが使用する必要があります。あなたは準備ができたワークショップに行き、私からの電話を待ちます。」
以上、準備完了と実行中という2つの状態を何回転したか分かりませんが、ようやくインストール手順リストの作業が完了しました。
最後に、HTML を含むパッケージが正常に返送されました。
ログイン後の行動については、私は気にしません。
もうすぐ暗い部屋に戻ります。ここを離れるのは耐えられません。
しかし、いくつかのスレッドに比べれば、私はまだ幸運です。実行後に完全に破壊されますが、私はまだ生きています。
暗い部屋に戻って、古いスレッド 0x6900 が質問しました:
「どうでしたか?初日はどうでしたか?」
「私たちの世界のルールは非常に複雑です。第一に、いつ実行に選ばれるかわかりません。第二に、実行プロセス中はいつでも中断され、CPU ワークショップを放棄する可能性があります。」
3 番目に、ハードディスクが表示されると、データベースなどの時間のかかる操作を CPU に任せて待機させる必要があります。4 番目に、データが到着してもすぐには実行できず、待機する必要があります。 CPUは「
」を選択します
「若者はよくわかっている」
「なぜ多くのスレッドが実行終了後に死ぬのか理解できません。なぜ私たちはまだ生きているのですか?」
「あなたはまだ知らない、不死は私たちの特権だ、ここにはスレッドプールと呼ばれる正式な名前がある!」
平凡な日々はこうやって過ぎていきます。スレッドとしての私の日常は、荷物を受け取り、荷物を処理して、薄暗い家であるスレッドプールに戻ることです。
ある日帰ってきたとき、兄弟が「今日はゆっくり休んでください、明日は最悪の日になるでしょう」と言うのを聞きました。
カレンダーを見てみると、明日は11月11日です。
案の定、真夜中を過ぎた頃、大量の荷物の流入に対処するために、スレッドプール内の誰もアイドル状態になることができず、全員が去ってしまいました。パッケージを処理するために、CPU ワークショップの使用率が非常に高く、ハードドライブが異常に点滅しており、それでも処理できずに山のように積まれています。 。
選択肢がありません。これらのパッケージのほとんどは、単にページを閲覧し、注文し、購入し、購入しています。
どれくらい時間がかかったのかわかりませんが、バオバオ山はついにゆっくりと消えていきました。
やっと息ができるようになりました、この日のことは一生忘れないと思います。
この出来事を通して、私は自分が住んでいる世界を理解しました:これは電子商取引ウェブサイトです!
私の毎日の仕事は、ユーザーのログイン、閲覧、ショッピング カート、注文、支払いを処理することです。
私はスレッドプールのベテラン 0x6900 に尋ねました:「どれくらいの時間作業しなければなりませんか?」
「システムが再起動するまで待つ必要があります」、0x6900 が言いました
「システムの再起動を経験したことがありますか?」
「どうしてそんなことが可能なのでしょうか?、システムの再起動は私たちの死の瞬間、つまり世界の終わりです。再起動すると、スレッドプール全体が破壊され、時間と空間が消滅し、すべてが最初からやり直しになります。」
「いつ再開しますか?」
「何とも言えないけど、目の前の人生を楽しんでください…」
実際、私のお気に入りのパッケージは写真をアップロードすることです。ネットワークが遅いため、Ready Workshop と CPU Workshop に長時間滞在して、多くの興味深いスレッドを知ることができます。
たとえば、最後に memecached スレッドに会ったとき、彼は大量のユーザー データが彼を通じてキャッシュされ、それが配布されたと言いました。 多くのマシンで利用可能です!
その後のログイン操作が非常に高速になるのも不思議ではありません。データベースからデータが取得されなくなったことがわかりました。ところで、他のマシンにアクセスしたことがありますか?
彼は、データにアクセスするたびにネットワーク経由でそのマシンに GET と PUT コマンドを送信することしかできないのに、他には何もわからないのはなぜだろうと言いました。
もう 1 つの例は、最後に待機中にデータベース接続スレッドに遭遇したときで、そこにも接続プールがあることを知りました。これはスレッド プールとほぼ同じです。
彼は、一部のパッケージが非常に変態的だったので、1 年分の注文データまでチェックしたと言い、私は死ぬほど疲れました。
それは純粋なデータです、私はそれを HTML に組み立てる必要があります。その作業量はあなたのものよりも何倍もかかります。
JDBC 接続をより簡単に実現するには、memecached と良好な関係を築き、memecached から直接データを取得し、データベースへの直接呼び出しをできるだけ少なくする必要があると彼は言いました。
はい、はい、重要なのは、事前にデータをキャッシュに取得する必要があるということです。そうしないと、最初にキャッシュに問い合わせてデータがなかった場合でも、私はあなたを見つける必要があるのではないでしょうか?
人生なんてこんなもんだ、楽しくなければ意味がない?
ある日、私は外で死にそうになり、スレッドプールに戻れなくなるという恐ろしいことに遭遇しました。
本当は、私はこの危険を予測できたはずでした。
数日前、私は http から送信されたいくつかの入金および出金パッケージを処理しました。古いスレッド 0x6900 が私に特別に尋ねました:
「これらの荷物を扱うときは特に注意してください。最初にロックを取得する必要があります。アカウントに入金または引き出しをするときは、アカウントをロックする必要があります。そうしないと、他のスレッドがあなたを待っています。私はこの状況を利用しました私は若い頃とても乱暴だったので、それを利用しました。」
私を「怖がらせる」ために、0x6900 という種類には 2 つの形式も用意されています:
1. ロックなし
2. 施錠状況
ドアの施錠をしなかったことが、こんなに重大な事故を引き起こすなんて、ゾッとしました。
今後は入出金の荷物を見るときは気をつけます 幸い事故はありませんでした。
今日受け取った荷物は、有名な俳優の口座から有名な監督への送金でした。誰であるかは明かしませんが、金額は決して小さくありません
。古いスレッドの指示に従って、まず有名な俳優のアカウントをロックし、次に有名な監督のアカウントをロックします。
しかし、私がまったく予想していなかったのは、別のスレッドが存在し、そう、それは 0x7954 であり、同時に監督から俳優にお金を送金していたということでした。
それで、こんなことが起こりました:
最初は何が起こっているのか分からず、待ちの作業場に座って待っていたのですが、待ち時間が数十秒と長すぎました! こんなことは今まで経験したことがありません。
この時、スレッド 0x7954 を見つけました。彼はそこに座ってのんびりコーヒーを飲みながら、私は彼とチャットを始めました。
「お兄さん、コーヒーを8杯飲んだそうですが、仕事に行かないのですか?」
「お茶を9杯も飲みませんでしたか?」と0x7954が答えました。
「ロックを待っているけど、どの孫がロックを解除してくれないのか分からない」
「私もロックを待っています。どの孫がロックを解除しないかを知ったら、彼を撲殺します。」 0x7954 は弱る気配を見せません。
こっそり見てみたら、この男は私が待っていた所長の錠前を腕に抱いていませんでしたか?
明らかに、0x7954 も私が待ち望んでいたロックを保持しているのを発見しました。
すぐに私たち二人はお互いに譲歩することを拒否して喧嘩を始めました: 「先に鍵を渡して、先に終わらせさせてください」
「いえ、いつも仕事が終わったらロックを解除します。今は絶対に渡せません」
口論から喧嘩までは数秒しかかかりません。
さらに重要なのは、私たち 2 人がこの有名な監督と俳優のロックを保持しているだけでなく、他の多くのロックも保持しているため、待機スレッドがますます増え、部屋は視聴者でいっぱいです。
最後には、これまで見たことのない究極のボス「オペレーティングシステム」も登場しました。
結局のところ、ビッグボスは知識が豊富です。彼はそれをひと目見て鼻を鳴らして、軽蔑的に言いました。
「再びデッドロックが発生しました」「二人でどちらかを殺したいのですが、さあ、くじを引きに来てください」
この瞬間、おしっこが出るほど怖かったです。
震えながらくじを引いて、開いてみると「生きる」の文字が。
ああ、やっと命が救われました。
哀れな 0x7954 はすべてのリソースを引き渡すことを強制された後、残念ながら殺され、行方不明になりました。
ディレクターのロックを取得したので、作業を開始できます。
Big Boss のオペレーティング システムは突風のように消え、彼の声だけが後ろから聞こえてきました:
覚えておいてください、ここでは私たちは監督 >俳優です。お互いのことをどのように知っていても、まず監督のロックを取得する必要があります
監督や俳優だけでなく、他の多くの人々が存在するため、Boss はリソースのサイズを計算するために使用されるアルゴリズムであるテーブルを残しました。計算後、ロックは常に大きいものから小さいものへと取得されます。
私はスレッドプールに戻りました。誰もが私の冒険について知っていて、ひっきりなしに質問をしてくれました。
悪質なスレッド スケジューラが Big Boss アルゴリズムを壁に投稿しました。
毎朝、悪徳不動産業者や美容院のウェイターのように、私たちは玄関に立って、猿にだまされているかのように大声で唱えなければなりません:
「複数のリソースをロックするときは必ず注意してください。ボスのアルゴリズムに従ってサイズを比較し、大きいものから順にロックする必要があります。」
------------------------------------------------- -----
何日も経った後、他のスレッドと私は奇妙なことを発見しました: パッケージの処理はますます簡単になっています
ログイン、閲覧、お金の節約など、どのパッケージであっても処理手順は同じで、固定の HTML ページが返されます
一度覗いてみたら、こう書かれていました:
「今夜0時から4時までシステムメンテナンスとバージョンアップを行います。ご迷惑をおかけして誠に申し訳ございません。」
古いスレッド 0x6904 にそのことを伝えると、彼はため息をついてこう言いました:
「ああ、私たちの命は終わってしまった。もうすぐシステムが再起動されて、私たちは消滅してしまうようだ。さようなら、兄弟。」
ついにシステム再起動の瞬間がやって来ました。
待っている作業場、準備ができている作業場、さらにはCPU作業場さえも、一つずつ消えていくのが見えました。
私の周りのスレッド兄弟はどんどん減り、ついに私だけが残りました。
私は野原で叫びました:他に誰かいますか?
誰も答えませんでした。
私たちの世代のスレッド プールはその使命を完了しました。
次世代スレッドプールが間もなく生まれ変わります。
(終了)
この記事を読んで何かを学んだ場合は、高評価をお願いします 記事に間違いがある場合は、ご指摘ください。
お互いから学び、一緒に進歩しましょう!