[quote=引用 27 楼 weixin_40068689 的回复:] ThreadPool.SetMaxThreads(200, 200);这句代码要放在哪里?我放在Application_Start和页面里面都不行
ThreadPool.SetMaxThreads(200, 200);这句代码要放在哪里?我放在Application_Start和页面里面都不行
ThreadPool 的上限是运行时根据系统可用资源动态确定的,不要随意修改 ThreadPool 本身就含有队列,并不需要自行构造一个缓冲队列 不要有意把事情弄复杂了 你总说页面页面的,显然是在做 web 应用。由于 http 是无状态协议,用户的每一个请求,对于服务端而言都是独立的
从设计模式上比较。 你的想法是搞n个线程,线程一直存在在,所以可以认为是用n个小池子,一起处理任务。 .net线程池则是搞个大池子,有个Manager来统管线程的分配。显然用大池子简单明了效率高。 线程池的大小,你还可以根据你的需求调整。
那就是有多少url,循环开启多少个线程去执行就好啦。 不过为什么不适用线程池呢?[/quote [quote=引用 32 楼 weixin_40068689 的回复:] [quote=引用 30 楼 xuzuning 的回复:] ThreadPool 的上限是运行时根据系统可用资源动态确定的,不要随意修改 ThreadPool 本身就含有队列,并不需要自行构造一个缓冲队列 不要有意把事情弄复杂了 你总说页面页面的,显然是在做 web 应用。由于 http 是无状态协议,用户的每一个请求,对于服务端而言都是独立的
每个人都有每个人的看法而已
比如说,以现在的语法,写var result = await WebHelper.Search(url, options);这样的代码,这就是调用系统线程池来优化了。 如果不熟悉 async/await,那么可以写ThreadPool.QueueUserWorkItem(h => { var result = WebHelper.Search(url, options); ........显示 result });这样的代码来异步执行代码。 异步本身很简单。你并不需要创建任何 Thread 实例。
var result = await WebHelper.Search(url, options);
ThreadPool.QueueUserWorkItem(h => { var result = WebHelper.Search(url, options); ........显示 result });
只要有一个异步并发处理任务,你就使用系统线程池机制注册一个任务给它异步去执行,就行了。 你用不着自己创建什么线程。
[quote=引用 5 楼 weixin_40068689 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 那就是有多少url,循环开启多少个线程去执行就好啦。 不过为什么不适用线程池呢?
不是页面吗?哪里来的队列?
110,534
社区成员
642,576
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧