要求への迅速な対応について話します

チームの最前列の後ではなく、頭ではなく、尾、心臓崩壊するだけでなく、ジレンマ、待機。
携帯電話を果たし、数と呼ばれ、待機です。
私はあなたを待って一つは、その後、近い将来以内に、待ち時間の一種です。
これは私の長い髪や腰にするには、形見です...待機があります。

応答について

考えられているフィードバックを受信することに応答して開始要求、。応答の内容は、所望の結果、または適切な場面右プレゼンテーションは、アカウントにこのフィードバック経験、右側の出発点に応じて、良い経験を持つことができる場所、ちょうど慰めです。

クイックレスポンス

異なるシナリオは、応答方法を決定します。

(1)のみが送信されたデータが到着したかどうかに関係タイプを開始します。

タイプはすぐに成功したフィードバックデータを受信した後、他のスレッドの処理に成功した場合、または非同期処理を処理し、この時点でのフォローアッププロセスを気にしない、投稿の成功を気に開始しました。

(2)リアルタイムの結果の種類を、結果を待っています。

処理が完了した後、要求されたデータを送信した後に、(例えば、3秒以内のような)より短い処理時間と、フィードバックが生じ得ます。そうでなければ、第1のフィードバックデータが正常に受信され、フロントエンドクエリの迅速な処理と非同期処理状態マーク又は進行の前端部に通知し、フィードバックのフロントエンドは、その後の進捗状況を提示するノンブロッキングな方法で、受信されています。

フロントエンドは、次のステップに直接ユーザーを導く、フィードバックを受信することができる後に、それはすべての未処理の満足の処理を終了した場合、次のステップでは、情報は依然としてユーザ現在の処理条件にフィードバックを述べることができます。

(3)情報の問合せタイプ

情報クエリは、あなたは通常、最初のページをロードすることができ、および非同期のクエリ結果をロードします。データ部分がキャッシュ情報が存在する場合、データベースクエリキャッシュを使用することによって低減することができるが、直接返すキャッシュ内のデータを使用します。キャッシュがリフレッシュするかどうかを決定するリフレッシュ時間以上があるかどうかを検出するために、データベースクエリをキャッシュせずに、簡単な方法で、適切なリフレッシュポリシーが必要です。あなたは通常、高度なキャッシングフレームワークを使用することができます。

迅速に対応

基本原則:早期のフィードバック

基本的な方法:最初の復帰、非同期処理、およびその後予告

(1)スレッド

糸処理方法において、要求データを受信すると、要求を直接返します。C#コード次のように、プロセスは以下の方法を使用して、3秒かかると仮定すると、それは0秒に近いました。

Stopwatch sw = new Stopwatch();
sw.Start(); -- 计时开始

var thread = new Thread(new ThreadStart(() => {
    // 处理过程
    Thread.Sleep(3000);
}));

thread.Start();            

--  显示耗时
return sw.ElapsedMilliseconds.ToString(); 

このアプローチの主な問題は、長期バイアス長いといくつかのより多くの要求を扱うときに、スレッドのデータが大幅に可能なすべてのリソースを使い果たし増加するであろう、ということであり、アプリケーションが使用できなくなります。

(2)スレッドプール

スレッドを破壊する損失を低減するために、およびリソースの使用を制御するためのスレッドプールを作成するために、繰り返し使用してください!C#では、私たちは、スレッドプールのスレッドの方法の効果を達成することができます。

ThreadPool.QueueUserWorkItem((state) => {
    // 处理过程
    Thread.Sleep(3000);
    Debug.Write("处理完毕!");
});  

(3)のキューを

タスクの要求は、特定の焦点のピークバランスではなく、限られたアプリケーションの処理能力、そして、あなたが実行するゆったりとしたタスクの待ち行列に参加するキューイングメカニズムを確立することができ、それがマシンのパフォーマンスを十分に発揮することができ、その処理を超えることはありません容量。タスク実行対象は、以下の例示的なC#でのようにフォームを簡素化。

/// <summary>
/// 任务执行线程主体
/// </summary>
private void TaskRunning()
{
    while (_Working)
    {
        QueueTask<T> task = null;
        lock (_RunLocker)   
        {
            if (_TaskRunQueue.Count > 0)
            {
                task = _TaskRunQueue.Dequeue();  
            }
        }
        // 还存在任务执行其任务过程
        if (task != null)
        {
            task.Callback(task.ObjectKey, task.Context);
        }
        else
        {
            // 等待新任务通知
            _WaitHandle.WaitOne();
        }
    }
} 

(4)ミドルウェア

ミドルウェアの使用は、効果的にアプリケーション間のデカップリングとアプリケーションが高度にスケーラブルで拡張性になり、データはミドルウェアを投げ、ミドルウェアは、関連する業務プロセスにタスクを配布する責任がある、と彼らの状態を管理することができます。そのようなRabbitMQのように、それによって、タスクマネージャの異なるアプリケーション・プロセスと通信することができます。

タスクモード

(1)リリース購読

このトピックは、ときにデータのリリースパーティー、テーマの決定、アプリケーション関連データのテーマはトピックにサブスクリプションが必要、加入者は、適切なメッセージを受信して​​ビジネスプロセスをトリガーします。そのマルチアプリケーション処理に応じて同一のデータ(メッセージ)は、パブリッシュ・サブスクリプションは、非常に適切である場合。

(2)の方法の生産者と消費者

時間のかかる作業の多くが到着すると、あなたは、並行して、これらのタスクを処理するために、複数のワーカープロセスを開くことができます。打ち上げパーティーは、作業プロセスは、アイドル状態のワーカープロセスがすぐに(すなわち、消費)を引き継ぐ消費者、生産され、生産作業です。それでも取り扱い、しかし、あなたは仕事のプロセスを増加し続けることができます。

フォールトトレランス

タスクの結果が実行されなければならないことを確実にする方法、状況タスク実行の失敗を目的としたフォールトトレランス。まず、タスクが配布されていることを確認する必要があり、その作業プロセスが失敗するには、自動的に他の作業プロセスに再割り当てすることができます。第二に、販売代理店が自分の中断タスクキューを再開するとき。これを達成するために、そのようなタスクの実行結果通知ACK、永続メッセージとして適切な処理機構の必要性。そして、これらは、より成熟したソリューション、などのRabbitMQなどなどです。

おすすめ

転載: www.cnblogs.com/timeddd/p/10988790.html