パフォーマンステスト|分散、高並行処理、マルチスレッドの理解

分散、高度同時、マルチスレッド三つの言葉を参照してください、多くの人々はそれが= =並行性の高いマルチスレッドに分散されていないと思いますか?

インタビュアーは手段を解決するために使用することができる、高度に並行システムに要求する、または整合性の問題を解決するために、分散方法システムを尋ねると無知に見えることを余儀なくされていませんか?

マルチスレッドの使用がないことを意味しながら、実際に、接触の初めに、多くの人々は、高い並列性を配布する、マルチスレッドでは、大量のユーザーに対して同時にアクセスすることができ、いわゆる分散性の高い並行システムを勘違いし、3を混乱させますそれは私たちが、同時容量のシステムを提供することができることがありますか?実際には、それらの3つが常に付帯されているが、異なる重点があります。

、マルチスレッドを分散し、高い並列性を理解するには?(パース面接の質問と回答を含みます)

そして、私が最後に見て分布する、非常に同時、これら三つのマルチスレッドの違いは何ですか?

何が配布されますか?
解決するために多く分布概念が採用されている単一の物理サーバーの容量と性能のボトルネックを最適化することです。問題領域は、異なる技術的な面で非常に対処する必要がありますが、また、含まれます:分散ファイルシステム、分散キャッシュ、分散データベース、分散コンピューティング、などのHadoopなどのいくつかの用語、飼育係、MQおよび分散その他の関連を関連。概念的には、二つの形式で分散型の実装:

水平方向の拡張:マシンは、マシンを追加することにより、途中でトラフィックを運ぶことができなかった、すべてのマシンが同等のサービスを提供することができ、すべてのサーバにトラフィックを分割します。

垂直方向の分割は:需要のフロントエンドは、問い合わせの様々なを持って、機械を運ぶことができなかった、さまざまな要件は、支払い要求を処理するためにそのような機械などの各種機械、チケット処理要求クエリI、Bのマシンに分散させることができます。

高い同時実行性とは何ですか?
何千人もの人が見ている間、そのようなオンラインビデオサービスなど:相対的な用語を分散、問題解決における高い同時実行は、それがどのように少量同時に、ある反応のいくつかに焦点を当てます。

技術、異なる物理サーバに割り当てられた同時トラフィックを通じて解決するために、高並行処理を分散させることができます。しかし、それを超えて、多くの他の最適化方法もあります。例えば、CDNなどのすべての静的コンテンツをキャッシュシステムを使用して、あなたはまた、サーバのサービス能力を最大化するために、マルチスレッド技術を使用することができます。

、マルチスレッドを分散し、高い並列性を理解するには?(パース面接の質問と回答を含む)
マルチスレッドは何?
マルチスレッドは、ソフトウェアまたはハードウェアから複数のスレッド技術の同時実行を実現するために指し、これらのプロセスは、(実際に実行交互)が同時に実行されるように表示されるように、それは、複数のプロセスをスケジュールするCPUを問題解決の詳細です。

これらの概念、マルチスレッドの問題は基本的に発生した最大の問題は、スレッドセーフで、最も明確でも、比較的簡単な手段です。高品質なマルチスレッドコードを書くために、Java言語、JVMのメモリ・モデルの必要性、命令の再配置の理解、で。

要約すると:

全体の外交サービス、技術、非常に難しい、この基盤を持つ、高い同時実行の非常に広い範囲を形成し、高スループットシステムが構築しやすい別のマシンに物理リソースの観点から、分散、
高い同時実行は、ビジネスの観点からです;これは、配布することができる、高い並列性を実現するシステムの能力を記述することを意味し、また、キャッシュとして使用することができ、CDNは、当然のことながら、またマルチスレッド含んで
マルチスレッドをCPUスケジューリング機能を最大化するためのプログラミング言語を使用する方法に焦点を当てています。

、マルチスレッドを分散し、高い並列性を理解するには?(パース面接の質問と回答を含む)
、高度同時、マルチスレッドの顔の質問あなたと一緒に配布され、頻繁に尋ねたインタビュアーの一部を共有するには、以下の
図1は、分散システム管理サービスを行う方法、

一般的なインターネットビジネスの特性、例えばクロス状態ガバナンスの大規模なルームサービスに対して大規模な動作を中心に、突然のトラフィックの急増、ネットワーク遅延、エンジンルームの失敗、高いSLAは、ユーザの経験を満たすためにオンラインサービスを保証し、戦略は制限ダウングレード、サービス埋め込み移住、サービス、出版、動的ルーティングとグレーを含みます

2、分散トランザクションの理解

本質的には、分散トランザクションは、異なるデータベースからのデータの一貫性を確保することです。

トランザクション持続性の原子一貫分離のACID特性

+最終メッセージトランザクションの一貫性

CCは、全体のビジネスロジックのためのプログラミングフレームワークは、3分割されて提供されます。キャンセルと3つの操作を確認し、試してみてください。オンライン注文には、例えば、バックルのステージをお試しください段階を確認し、インベントリに行くアップデートに失敗した場合注文状況、注文を更新することで、位相をキャンセル入力して、我々は株式を復元するために行くだろう。要するに、TCCは、異なるビジネスシナリオによって書かれたコードは、複雑さと同じではなく、同程度ではない、2フェーズ・コミット実装人工コードを介して行われ、従って、このモデルは、十分に再利用されません。

3.どのように達成することができ、負荷分散アルゴリズムを達成するために?

ランダム(ランダム)、回転(ラウンドロビン)、一貫したハッシング(一致ハッシュ)、およびスタンバイ(マスタスレーブ):多くの場合、以下の4つのアルゴリズムを使用します。

4、分散型クラスタ固有のシリアルナンバーを行う方法

世代IDのRedisに主に依存してRedisのはシングルスレッドであるので、グローバルに一意なIDを生成するために使用することができます。INCRアトミック動作を実現し、INCRBY Redisのことができます。

  1. プロセスとは何ですか

プロセスは、アプリケーションが実行され、各プロセスは、それ自体の別個のアドレス空間(メモリ空間)を有しています。

たとえば、デスクトップのIEブラウザをユーザーがクリックすると、プロセスを開始し、オペレーティング・システムは、そのプロセスの別のアドレス空間を割り当てます。ユーザーが再び左側にIEブラウザをクリックすると、それがプロセスを開始した、オペレーティングシステムは、新しいプロセスの新しい別のアドレス空間を割り当てます。現在のオペレーティングシステムでは、複数のプロセスをサポートしています。

  1. スレッドとは何ですか

プロセスは自発的割当の基本単位です。操作が行われたスレッドが処理の最小単位であり、即ち、プロセッサの基本的な単位は、スケジューリングを行います。人気の条件:プログラムは、プロセスを持っていますが、プロセスは複数のスレッドを持つことができます。

  1. スレッドとプロセスの違いは何ですか

スレッドは、プロセスが異なるタスクを実行するために、並行して各スレッドをスレッドの多くを有することができ、プロセスのサブセットです。異なる別のメモリ空間を使用するプロセス、およびすべてのスレッドが同じメモリ空間を共有しています。

  1. いくつかのマルチスレッド実装

(1)のスレッドを作成するために、Threadクラスを継承

本質的にThreadクラスは、スレッドのインスタンスを表す、Runnableインタフェースのインスタンスを達成することです。スレッドを開始する唯一の方法は、開始スレッドクラスによって()インスタンスメソッドです。start()メソッドは、新しいスレッドを開始し、run()メソッドを実行します。マルチスレッド達成するために、これは比較的簡単な方法で、その直接の後継Threadクラスを通って、run()メソッドをオーバーライドし、新しいスレッドを開始し、run()メソッドを自分で定義を実行することができます。

(2)スレッドを作成するために、Runnableインタフェースを実装

彼らは二つのクラスクラスを継承している場合は、あなたがスレッドを継承することはできません、Runnableインタフェースを実現することが可能です

(3)スレッドラッパーによってスレッドを作成するための呼び出し可能インタフェースを実装FutureTask

(4)ExecutorServiceの、コーラブルを使用し、今後はそのリターン結果スレッドを達成

ExecutorServiceの、呼び出し可能な、将来の執行の3つのインターフェイスは、実際にはフレームの一部です。JDK1.5の新しいスレッドを導入した結果を返します、あなたは苦労し、戻り値を取得するために、このような機能を持っている必要はありません。

タスクは、呼び出し可能インターフェースを実装しなければならない値を返します。戻り値タスクRunnabelがインタフェースを実装してはなりません。

呼び出し可能なタスクを実行した後、あなたは、オブジェクト呼び出し可能なタスクのリターンを得ることができるオブジェクトのget()メソッドを呼び出し、Futureオブジェクトを取得することができます。(get()メソッドがブロックされ、スレッドは、この方法が待っている、結果を返しません)

  1. ビジーループにどのようなマルチスレッドされました

ビジーサイクルは、それが空のサイクルを実行している、彼らはあきらめないCPUの制御、およびCPUビジーサイクルをあきらめたサイクルスレッドを持つプログラマが待機するように、従来の方法は待つとは違って()、スリープ()またはyied()です。目標は、待機中のスレッドが別のカーネルに目覚めるかもしれないマルチコアシステムは、実行されている場合、CPUのキャッシュを保持することである、それはキャッシュを再構築します。回避し、あなたがそれを使用することができ、再構築キャッシュを再構築するための待ち時間を減らすために。

  1. Javaのメモリモデルとは何ですか

Javaのメモリモデルは、コンピュータのメモリにJava仮想マシンの動作を定義します。JMMは時に別のスレッドから見える共有変数への書き込みを行うスレッドを決めました。ビューの抽象的な点から、JMMはスレッドとメインメモリとの間の抽象関係を定義:スレッドのメインメモリに格納された共有変数との間に、各スレッドは、専用ローカルメモリを有し、ローカルメモリは、スレッドに格納されています共有変数の/書き込みコピーをお読みください。

  1. なぜ、スレッドプールを使用できますか?

スレッドプールは、上限を提供し、(タスクの実装を含む)のリソースを管理します。各スレッドプールはまた、このようなタスクの数など、いくつかの基本的な統計は、完成されている維持しています。

前述の「Java並行プログラミングの芸術」のためのスレッドプールの使用についての借入のメリット:

リソース消費を削減します。スレッドを再利用することにより、消費に起因するスレッドの作成と破壊を軽減するために作成されています。

応答速度を向上させます。ミッションが到着すると、タスクは、スレッドの作成を直ちに実施することが可能になるまで待つ必要がないかもしれません。

スレッドには、管理性を向上させます。無制限の作成は、だけでなく、システムリソースを消費するだけでなく、流通、チューニングや監視を統一することができますスレッドプールを使用して、システムの安定性を減らす場合、スレッドは、希少資源です。

12.楽観と悲観的ロックとは何ですか

1)楽観的ロック:その名の通り、同時操作の間、スレッドの安全性の問題については、その競争をロックすることは常に発生しませんので、それがロックを保持する必要はありません楽観的、比較楽観的状態を生成 - この二つの交換をアトミック操作は、メモリ内の変数を変更しようとする前記競合が失敗した場合、対応する再試行ロジックがなければならないように動作します。

2)悲観的ロック:または、その名の通り、同時動作間のスレッドの安全性の問題は、競争は常に起こるだろうという悲観的ロックを悲観的状態を生成するために、そのリソース操作するたびに、排他的に開催しますロックは、同期のような、行き当たりばったり、リソースのロックを直接操作します。

13、高い同時実行は、タスクの実行時間は、スレッドプールを使用する方法を短い管理者ですか?どのように並行処理は、タスク実行スレッドプールを使用して、長時間ビジネス高くないですか?高い同時実行、スレッドプールを使用してどのくらいの時間が業務執行サービス?

1)高い同時、短いビジネスタスク実行時間、スレッドプール内のスレッドの数が+1還元スレッドコンテキスト切り替えCPUコアの数に設定することができます

2)高い同時実行ではない、長い時間の事業領域に対して実行されるように別々のタスクを参照してください。

ビジネスはIO操作に焦点を当てた長い時間であればa)に、その操作はCPU IOを取らないので、すべてのCPUが引退してみましょうと座っていないので、あなたはCPUを聞かせて、プール内のスレッドの数を増やすことができ、IO集約的な作業でありますより多くのビジネスを扱います

B)トラフィックが長時間運転に集中している場合は、計算集約的なタスクであり、算出さは、そのない溶液、及び(1)のように、プール内のスレッドの数が少なくなるように設定されている、スレッドコンテキストスイッチングを減らします

C)高い同時実行、長時間の業務執行、このタイプのタスクを解決する鍵は、プールをスレッドしないですが、全体的なアーキテクチャの設計では、彼らはデータキャッシュのいくつかの内部でビジネスを行うことができるかどうかを確認することが最初のステップである、第二には、サーバを増やすことですステップは、スレッドプールを設定すると、スレッドプールは、その他の関連記事への参照を設定します。最後に、長い時間の業務執行上の問題は、また、あなたが作業してデカップリングを分割するためのミドルウェアを使用できるかどうか、それを分析する必要があるかもしれません。

おすすめ

転載: www.cnblogs.com/wyf0518/p/11303583.html