2016-05-27 7 views
4
  1. .NETスレッドは軽量のユーザーモードスレッドであるか、カーネルモードのオペレーティングシステムスレッドですか。.NETスレッドはオペレーティングシステムスレッドと異なるのですか?

  2. また、SQL Serverを節約するには、.NETスレッドとオペレーティングシステムスレッドの間に1対1対応がありますか?ドキュメントBeginThreadAffinityEndThreadAffinity名前のメソッドの対称ペアを持っているThreadクラスは微妙.NETスレッドが実際のオペレーティング・システムのスレッドを超える軽量抽象化であることを示唆しているので、

また、私は興味をそそられています。

また、SQL Serverのように、MicrosoftがCLRでこの分離を維持しようとした際に、スタックオーバーフロースレッド自体を少し前に読んでいました。この目的のためにFiber APIを使用するいくつかのプロジェクトが進行中でしたが、私は思い出しましたが、私が読んだことのすべての詳細を理解しているとは言えません。

Windowsで作成されたスレッドの.NETスレッドの内部構造など、このトピックに関する詳細な資料が必要です。 Windowsで作成されたスレッドの構造については十分な情報がありますが、たとえばJeffrey RichterのWindowsの高度なプログラミングの書籍がソースの1つとなっています。たとえば、.NETの内部構造に関する専用の資料はありません。糸。

この情報は、現在公開されている.NETソースコード、またはReflectorやIL Spyなどの逆アセンブラを使用して利用できると主張する人もいますが、スレッド制御ブロックTCB)およびプログラムカウンタ(PC)およびスタックポインタ(SP)またはスレッドの待ち行列、またはスレッドが現在Threadクラスに属しているキューのリスト。

どこでこれについて読むことができますか?そのドキュメンテーションには何か言及されていますか?私はthese pages from the MSDNのすべてを読んだが、それは言及していないようだ。

+2

、.NETスレッドは、少なくともWindows上で、オペレーティングシステムのスレッドに対応します。 SQL CLRのホストされた世界では、それは必ずしも真実ではなく、他のプラットフォームで実行されている.NETコアランタイムについてはわかりません。私は.NETスレッドがOSカーネルスレッドに対応すると文書化されているとは思わないが、これはたぶん実装の詳細です。 –

+0

@ LasseV.Karlsenありがとうございました。 –

答えて

7

.NETのスレッドは実際には抽象ですが、基本的にはそれらをOSスレッドとほぼ同じものと考えることができます。特にガベージコレクションに関していくつかの重要な違いがありますが、大多数のプログラマ(読者:WinDBGをスピンアップする可能性の低いプログラマ)には機能的な違いはありません。通常のデスクトップアプリケーションとWebアプリケーションで

For more detail, read this

関連する問題