小编sfi*_*man的帖子

Mono ThreadPool并发问题

我写了一个使用ThreadPool进行多线程处理的软件.

ThreadPool.SetMinThreads(128, 128);
ThreadPool.SetMaxThreads(512, 512);

for (int i = 0; i < 40; i++)
{
    ThreadPool.QueueUserWorkItem(_ =>
    {
        Console.Write("!");
        Thread.Sleep(1000);
        Console.Write(".");
    }, null);
}
Run Code Online (Sandbox Code Playgroud)

在每个线程内部,我执行阻塞网络操作(使用http).围绕阻塞网络模型而设计的软件我无法转向非阻塞1线程I/O.

它在Windows平台上运行完美,每个核心可以使用128-512个线程,没有任何问题,所有工作都应该工作.但当我转向单声道时,我看到了一些非常奇怪的行为.我不能让每个CPU核心运行多个线程,我可以得到 - 每个核心1个线程,无论我在SetMinThreads/SetMaxThreads中指定的是什么.

在Linux下使用.NET 4/4.5,MONO版本3.2.1以及我之前系统上的一些旧版本.顺便说一句,普通线程代码运行良好,例如,这给出了所需的结果:

for (int i = 0; i < 20; i++)
{
   var t = new Thread(_ => {
      Console.Write("!");
      Thread.Sleep(1000);
      Console.Write(".");
   });
   t.Start();
}
Run Code Online (Sandbox Code Playgroud)

c# mono threadpool

8
推荐指数
2
解决办法
3342
查看次数

标签 统计

c# ×1

mono ×1

threadpool ×1