sfi*_*man 8 c# 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)
小智 7
我们还尝试了很多单声道,看起来有以下帮助:
我们在linux上使用这两个选项和单声道表现得非常快(与windows上的.net相当)
Sey*_*ams -1
如果多线程不足以满足您的工作,为什么不使用这些东西的组合(例如:异步、多线程、并行)!?我认为这些可能对您有帮助: http://mono-for-android.1047100.n5.nabble.com/Task-Parallel-Framework-issues-td5711359.html stackoverflow.com/questions/5717059/implementation-of-任务在monodroid http://blog.errorok.com/2012/08/09/268/
| 归档时间: |
|
| 查看次数: |
3342 次 |
| 最近记录: |