动态线程

BXS_null 2018-09-11 05:09:48
现在大致有这么个需求:
客户会在页面上配置一个url地址,然后会不定时给我一些参数然后去访问这个url。后台会写一个静态队列和一个线程去访问这个url,队列里面是访问url需要的参数,线程用来取出队列的参数然后访问url。
现在的问题是:
客户不会只配置一个url,url的数量是不固定的,有没有办法让客户配置一个url的时候,后台自动产生一个队列一个线程去访问这个url。注意的是一个url只能对应一个队列,一个队列只能对应一个线程
(暂时不考虑大量线程对服务器的影响)
...全文
871 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
ponymavericks 2018-09-14
  • 打赏
  • 举报
回复
weixin_43205722 2018-09-14
  • 打赏
  • 举报
回复
感觉你们好厉害,太牛逼了
qq_31389927 2018-09-13
  • 打赏
  • 举报
回复
每个人都有每个人的看法而已
BXS_null 2018-09-13
  • 打赏
  • 举报
回复
引用 29 楼 hanjun0612 的回复:
[quote=引用 27 楼 weixin_40068689 的回复:] ThreadPool.SetMaxThreads(200, 200);这句代码要放在哪里?我放在Application_Start和页面里面都不行
随便你放在哪都行。因为他是静态的。 至于为何你放上去,项目无法运行,你自己调试一下看看 [/quote]刚刚试了下,那个最大线程数大于默认的就行,小于就运行不了。。。
xuzuning 2018-09-13
  • 打赏
  • 举报
回复
ThreadPool 的上限是运行时根据系统可用资源动态确定的,不要随意修改
ThreadPool 本身就含有队列,并不需要自行构造一个缓冲队列

不要有意把事情弄复杂了
你总说页面页面的,显然是在做 web 应用。由于 http 是无状态协议,用户的每一个请求,对于服务端而言都是独立的
正怒月神 2018-09-13
  • 打赏
  • 举报
回复
引用 27 楼 weixin_40068689 的回复:
ThreadPool.SetMaxThreads(200, 200);这句代码要放在哪里?我放在Application_Start和页面里面都不行

随便你放在哪都行。因为他是静态的。
至于为何你放上去,项目无法运行,你自己调试一下看看
BXS_null 2018-09-13
  • 打赏
  • 举报
回复
引用 30 楼 xuzuning 的回复:
ThreadPool 的上限是运行时根据系统可用资源动态确定的,不要随意修改 ThreadPool 本身就含有队列,并不需要自行构造一个缓冲队列 不要有意把事情弄复杂了 你总说页面页面的,显然是在做 web 应用。由于 http 是无状态协议,用户的每一个请求,对于服务端而言都是独立的
好的 感谢
BXS_null 2018-09-13
  • 打赏
  • 举报
回复
我不添加ThreadPool.SetMaxThreads(200, 200);这行代码,默认最大线程数是 800,800
BXS_null 2018-09-13
  • 打赏
  • 举报
回复
ThreadPool.SetMaxThreads(200, 200);这句代码要放在哪里?我放在Application_Start和页面里面都不行
BXS_null 2018-09-13
  • 打赏
  • 举报
回复
引用 19 楼 daixf_csdn 的回复:
从设计模式上比较。 你的想法是搞n个线程,线程一直存在在,所以可以认为是用n个小池子,一起处理任务。 .net线程池则是搞个大池子,有个Manager来统管线程的分配。显然用大池子简单明了效率高。 线程池的大小,你还可以根据你的需求调整。
我加了 ThreadPool.SetMaxThreads(200, 200);这句代码之后项目在服务器上运行不了了,不管我设置成多少,页面都是一直转转转,就是进不去
爱吃猫的.鱼. 2018-09-13
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
那就是有多少url,循环开启多少个线程去执行就好啦。 不过为什么不适用线程池呢?[/quote [quote=引用 32 楼 weixin_40068689 的回复:] [quote=引用 30 楼 xuzuning 的回复:] ThreadPool 的上限是运行时根据系统可用资源动态确定的,不要随意修改 ThreadPool 本身就含有队列,并不需要自行构造一个缓冲队列 不要有意把事情弄复杂了 你总说页面页面的,显然是在做 web 应用。由于 http 是无状态协议,用户的每一个请求,对于服务端而言都是独立的
好的 感谢[/quote]
引用 33 楼 qq_31389927 的回复:
每个人都有每个人的看法而已
hkjhjkhk
BXS_null 2018-09-12
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
比如说,以现在的语法,写
var result = await WebHelper.Search(url, options);
这样的代码,这就是调用系统线程池来优化了。 如果不熟悉 async/await,那么可以写
ThreadPool.QueueUserWorkItem(h =>
{
    var result = WebHelper.Search(url, options);
    ........显示 result
});
这样的代码来异步执行代码。 异步本身很简单。你并不需要创建任何 Thread 实例。
引用 16 楼 sp1234 的回复:
比如说,以现在的语法,写
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);
这样的代码,这就是调用系统线程池来优化了。

如果不熟悉 async/await,那么可以写
ThreadPool.QueueUserWorkItem(h =>
{
var result = WebHelper.Search(url, options);
........显示 result
});
这样的代码来异步执行代码。


异步本身很简单。你并不需要创建任何 Thread 实例。
BXS_null 2018-09-12
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
只要有一个异步并发处理任务,你就使用系统线程池机制注册一个任务给它异步去执行,就行了。 你用不着自己创建什么线程。
好 我试试,最开始是这样写的,但是线程池总感觉模模糊糊的,不如自己写的来的真实的感觉
  • 打赏
  • 举报
回复
只要有一个异步并发处理任务,你就使用系统线程池机制注册一个任务给它异步去执行,就行了。

你用不着自己创建什么线程。
  • 打赏
  • 举报
回复
系统线程池/.net异步机制,人家自动根据系统性能优化情况而自动调度线程池来完成你注册的任务。用不着你来自己发明什么线程池机制。
BXS_null 2018-09-12
  • 打赏
  • 举报
回复
引用 9 楼 daixf_csdn 的回复:
[quote=引用 5 楼 weixin_40068689 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 那就是有多少url,循环开启多少个线程去执行就好啦。 不过为什么不适用线程池呢?
我的队列名字跟线程名字怎么取,变量名能拼接吗?因为一个url对应一个队列,所以对列名字肯定是不能重复的。名字咋取[/quote] 不需要队列。url+参数,发起线程执行。即可。不需要复杂的设计。[/quote] 不需要队列?那别人给我一次参数我就开一个线程?一次来一百个参数我开一百个线程?
BXS_null 2018-09-12
  • 打赏
  • 举报
回复
用队列我想的是一个业务(url)只用一个线程运行。所有请求过来的参数我都放到队列里面,然后用线程取慢慢的访问url去
BXS_null 2018-09-12
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
不是页面吗?哪里来的队列?
页面上配置url,然后别人访问我的接口给我参数,我去访问这个url,但是数据量很大,我把数据都放在队列里面,而且url很多,每个url是单独的业务,所以把所有的url都分开,单独用线程运行。我的队列是放在一个类库里面写成静态的,放在队列里面是因为访问url会花点时间,不想别人访问我的接口之后一直等待
  • 打赏
  • 举报
回复
加载更多回复(12)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧