.NETスレッドは軽量のユーザーモードスレッドであるか、カーネルモードのオペレーティングシステムスレッドですか。.NETスレッドはオペレーティングシステムスレッドと異なるのですか?
また、SQL Serverを節約するには、.NETスレッドとオペレーティングシステムスレッドの間に1対1対応がありますか?ドキュメント
BeginThreadAffinity
とEndThreadAffinity
名前のメソッドの対称ペアを持っている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のすべてを読んだが、それは言及していないようだ。
、.NETスレッドは、少なくともWindows上で、オペレーティングシステムのスレッドに対応します。 SQL CLRのホストされた世界では、それは必ずしも真実ではなく、他のプラットフォームで実行されている.NETコアランタイムについてはわかりません。私は.NETスレッドがOSカーネルスレッドに対応すると文書化されているとは思わないが、これはたぶん実装の詳細です。 –
@ LasseV.Karlsenありがとうございました。 –