アルゴリズムとその実装にはさまざまな種類がありますが、この記事ではシングルコア、シングルスレッドのアルゴリズムではなく、マルチコア、マルチスレッドのアルゴリズムについて説明します。すべてのアルゴリズムの種類について説明するわけではありませんが (これは著者の能力を超えています)、マルチコア ネットワーク デバイスで一般的なアルゴリズムと、可能な最適化アプローチについて説明します。これらのアプローチの一部は検証されていますが、他のアプローチはまだアイデア段階にあり、データによってサポートされていません。 マルチコア アルゴリズムの最適化には、ロックフリーとロックレスの 2 つの目標があります。 ロックフリーは完全にロックフリーな設計であり、次の 2 つの方法で実装できます。
ロックレスの目的は、ロックを減らすことではなく、ロックの競合を減らすことです。これはロックの粒度に関係します。ロックの粒度が小さいほど、待機時間は短くなり、同時実行時間は長くなります。 ロックの競合では、ロックを取得した後に異なるスレッドがどのような異なるアクションを実行するかを考慮する必要があります。セッション プールの割り当てと解放を例に挙げます。複数のスレッドが同じセッション プールにアクセスし、セッションを割り当てたり解放したりするとします。セッション プールは tailq であり、割り当てはヘッドで行われ、解放はテールで行われます。 複数のスレッドが同時にセッション プールにアクセスする場合、セッション プールを保護するためにスピンロックが必要です。そうすると、割り当てと解放という 2 つの異なるアクションが互いに競合し、複数のスレッド上の割り当てまたは解放も互いに競合することになります。 ここで、割り当てに 1 つのロックを使用し、解放に 1 つのロックを使用して両端キューを生成することを検討できます。これにより、割り当てと解放の間の競合を減らすことができます。 http://www.parallellabs.com/2010/10/25/practical-concurrent-queue-algorithm/ (この記事を参照)。 2 つのプールを使用して、1 つのプールを割り当て、1 つのプールを解放することも検討できます。割り当てられたプールを使い切った後、2 つのプールのポインタを交換します (このとき、両方のプールが空の場合を検討します。これにより、割り当てと解放の競合が軽減されるだけで、この競合を完全に排除することはできません)。 ロックベースまたは CAS ベース (ロックフリー) のデータ構造のいずれであっても、ステート マシンが必要です。異なる状態で異なる処理を実行し、ロックの粒度を上げます。つまり、状態の数ではなく、状態マシンの数を増やし、状態保護の範囲を縮小します。これは実際に体験してみる必要があります。 元記事: パフォーマンス最適化の方法とテクニック: アルゴリズム 【編集者のおすすめ】
|
<<: MySQLインデックスの背後にあるデータ構造とアルゴリズムの原理
>>: MySQL インデックスのデータ構造とアルゴリズム: インデックスの実装
過去 30 年間にわたり、この種のイノベーションの歴史に残る例は数多くありました。ウェブサイト上のメ...
要点: 教育における AI システムの開発者は現在、教師を支援するために取り組んでいます。信頼できる...
機械学習は、将来性が最も高く、業界に最大のメリットをもたらす AI の分野です。関連レポートによると...
2017年5月に世界保健機関が発表したデータによると、世界中で毎年約125万人が交通事故で亡くなって...
Github を使用しているときに、次のプロンプトを見たことがありますか? $ gitクローン ht...
揚子晩報は4月12日(蒋桂東特派員、範牧暁子記者)に、揚州市在住の張さんがオランダ花海風景区を訪れた...
最適化はあらゆる分野で重要です。一部の最適化は初期化から始まり、その後ソリューションを繰り返し更新し...
科学者たちは地震を正確に予測できる人工知能(AI)システムを開発した。これは自然災害に備え、人命を救...
[[201234]]編集者注: 人工知能は多くの人の仕事を奪うだろう、これはメディアの報道でも事実...