2011-06-23 14 views
1

今年はOSとプロセッサのアーキテクチャを移行しています。現在のアプリケーションは特にスレッドセーフではありませんが、現在の仕様では機能しません。また、.net4にも移行しています。32ビットxpから64ビットへの移行Win7 - スレッディングの意味

適切なスレッドフェイザーでアプリケーションを書き直していますが、これは多年にわたるプロジェクトです。その間に選択肢はありませんが、コード化されていないシステムを移動します。

私の質問はこれです:誰も同じような状況にあったのですか?どのようにして新しい仕様を実現する前に、すべての問題を徹底的に排除することができますか?これらのスレッディング・リスクを緩和する良い方法はありますか?また、スレッドのスケジューリングや、移動中に注意すべき動作の主な変更点は何ですか? 任意の支援のためのThinnks

答えて

2

私は、既存のアプリケーションでスレッドスケジューリングを根本的に変更するOSやFrameworkのいずれにも気づいていません。私が見ている最大のリスクは、新しいCPUがおそらくあなたの現在のものよりも速く実行される(新しいものは通常はより速い)ことで、プロセスが与えられた各タイムスライスで実行できるコードの量が変わることです。あるスレッドが待機状態になると、他のスレッドが実行できる時間スライスが多くなります。このようなタイミング変更の結果として、既存の休止スレッド・バグが頻繁に現れる可能性があります。あるいは、あなたは引き続き幸運かもしれません。これについては言及していませんが、初めてマルチコアハードウェアに移行する場合、プロセス内での同時実行性(したがって衝突のリスク)がほぼ確実に見えます。

緩和のため、共有データ/コードを見直して同時にアクセスできるすべてのものを適切に保護する以外には、本当に良い救済策はありません。テストで致命的な問題が発生した場合(適切な展開前に完全なストレスと回帰を計画していますか?)、スレッドまたは関連する関数の上部に何らかの「大きなロック」があると考えて、そのピアとのパス。これはおそらくパフォーマンスを低下させますが、常にクラッシュする高性能コードはあまり使用されません。

2

スティーブ・タウンゼントが述べたように、警告のカップルと、任意の有意差があってはならない:ポインタはちょうど大きな得たので64-ビットに32ビットからの移行

  1. は、問題が発生することがあります。これは、もはやポインタを保持するためにDWORD値を使用できなくなることを意味します。
  2. VistaとWin7はハイパースレッディングを認識しています。つまり、異なる論理コアでタスクをスケジューリングする方が効率的になります。これは、(Steveが書いたように)あなたのアプリケーションで既存の並行処理の問題を明らかにする予期しないコンテキストスイッチが表示されることを意味します。
+0

ありがとうございます。 –

関連する問題