none
.NET Frameworkのバージョンごとの最大スレッド数について RRS feed

  • 質問

  • .NET Framework 2.0系、4.0系、.NET Core系での最大スレッド数の上限についてなにかバージョン毎に制約はあるのでしょうか?

    当方は、.NET  Framework 2.0系のランタイムを使用していますが、スレッドがcoreあたり20個までしか使用できないよう(これは事実かはまだ見切れていません。)で、.NET Framework4.0や.NET Coreに移行するか悩んでいます。

    core数に依存するとか、32/64bitに依存するとか情報をお持ちでしたら、アドバイスをいただければと思います。

    メモリについては、
    32bitから64bitになって、Objectあたり1.5GBくらい使えて、.NET Coreになって、Objectあたり12GBまで使えるようになった自作のテストPGで確認出来ています。

    2020年7月16日 0:01

回答

  • スレッドプールの話とスレッドの話をごっちゃにされているように見受けられます。

    長時間スレッドを占有する処理は、スレッドプールを使用するべきではありません。System.Threading.Threadで生のスレッドを使用してください。System.Threading.Threadは、メモリ以外特に制約はないはずです。スレッドスタックは意外に大きいので、32bitプロセスだと割と作れる数は少ないですが。

    .NET 2.0の範囲ではないですが、Taskであれば、作成時にTaskCreationOptions.LongRunningを指定することでスレッドプール上のスレッドではなく生のスレッドで動作させることを期待できます(TaskSchedulerの実装次第ではあるんですが…)。
    • 回答としてマーク kiyo7447 2020年7月16日 1:31
    2020年7月16日 1:14

すべての返信

  • すみません。

    https://www.it-swarm-ja.tech/ja/c%23/threadpool%e3%81%ae%e6%9c%80%e5%a4%a7%e3%82%b9%e3%83%ac%e3%83%83%e3%83%89%e6%95%b0/972751978/

    をみて、制限を変えることで、.NET Framework 4.0は、最大スレッド数は、32678と理解しまいた。

    2020年7月16日 0:23
  • スレッドプールの話とスレッドの話をごっちゃにされているように見受けられます。

    長時間スレッドを占有する処理は、スレッドプールを使用するべきではありません。System.Threading.Threadで生のスレッドを使用してください。System.Threading.Threadは、メモリ以外特に制約はないはずです。スレッドスタックは意外に大きいので、32bitプロセスだと割と作れる数は少ないですが。

    .NET 2.0の範囲ではないですが、Taskであれば、作成時にTaskCreationOptions.LongRunningを指定することでスレッドプール上のスレッドではなく生のスレッドで動作させることを期待できます(TaskSchedulerの実装次第ではあるんですが…)。
    • 回答としてマーク kiyo7447 2020年7月16日 1:31
    2020年7月16日 1:14
  • ご回答をありがとうございます。確認してまとめてみます。

    2020年7月16日 1:31