2016-12-19 6 views
0

私はWinAPI InterlockedPushEntrySList をテストしていますが、私のテスト結果はちょっと変わっています。InterlockedPushEntrySListのパフォーマンス

私は基本的にLockFreeで考えていましたが、プッシュ速度はスレッドが増えるほど速くなります。 1つのスレッドが少なくとも成功するためです。スレッドとしての私のテストで InterlockedPushEntrySListの速度が遅くなります。

私のテストは非常に簡単でした。マルチスレッドでプッシュ動作を実行するだけです。 ミステストの原因となったすべての要因を取り除いた。

スレッド1:138075326 スレッド2:131584007 スレッド3:90196884 therea 4:82699521

それは5秒

のためにプッシュのカウントですplzは私に理由を教えてㅠ 誰もテストにこれをしましたか。?

+1

私はあなたが持っている操作が速くなると思う理解していないより多くの競合。操作は勝者にとって同じ時間がかかり、敗者にとっては時間がかかります。 –

+0

私が間違っていたのは、実際には、N個のスレッドで競合するとき、少なくとも1つのスレッドで同じスピードを意味します。 – chfhrqnfRhc

答えて

1

私は基本的にLockFreeで考えていましたが、プッシュ速度はスレッドとして高速になります

このような場合は、ロックフリーのコードを書いて、何千ものスレッドを無限のスピードで起動します。

「ロックフリー」とは、アルゴリズムがロックを使用して同期を達成するのではなく、アトミック操作(最も顕著なCASループ)を使用することを意味します。

ロックフリーアルゴリズムは、ロックされていないアルゴリズム(通常はそうでない)よりも速く実行されるということではありません。

それはあなたのケースでは(それは通常、スレッド数が増加するにつれて遅くなります)ロックフリースレッドの数に応じて、遅くまたは速くなること

を意味するものではありません、より多くのスレッドがあるとして、彼らは意志彼らの操作を成功させるために "戦う"ことが難しくなければならないが、これは通常マルチスレッドコードの場合である。スレッド間で共有するものが増えるほど、スレッドの存在も増えます。競合が発生すると、パフォーマンスが低下します。ロックフリーかもしれない簡単に問題は、を解決するそれを

+0

あなたの答えをありがとう!私の場合、スレッドがたくさんあるので、彼らは戦うでしょう!常に勝者がいます。したがって、マルチスレッドは同じスピードを持つか、少なくとも1スレッドより速くなります。それは私のLockFreeAlgorithmの基本理論です。そうじゃない? ㅠ – chfhrqnfRhc

+0

「勝った」書き込みは無条件の書き込みと同じくらい速いと仮定していますが、それは当てはまりません。ハードウェアは競合に対処するために余分な作業を行う必要があります。つまり、各CPUが勝っているか失われているかを知るためには、処理が遅くなることがあります。 –

+0

ありがとうございます! 「余分な仕事」PLZに関するリンクや情報を入手できますか?私は詳細を取得したい...! – chfhrqnfRhc

関連する問題