首页 新闻 会员 周边 捐助

.net后台开多个线程对网站性能的影响?

0
悬赏园豆:20 [已解决问题] 解决于 2019-06-24 15:49

后台需要调用多个不同的api获取数据,想采用多线程的方式,同时获取,以提高效率。有点担心在访问量大的时候,服务器会遭不住,问下有这方面经验的大神,这个解决方案靠谱么?还有其他更好地解决方案么!

chenhp的主页 chenhp | 初学一级 | 园豆:9
提问于:2016-10-22 19:45
< >
分享
最佳答案
0

应该用任务(Task)去做,由系统为你处理异步问题,而不是自己去管理线程。

即使用线程,也应该开固定数量的线程,保存到Application里,由你管理任务队列,分配任务。

 

如果你无法确定你的线程什么时候关闭,又无法确定有多少这样的请求,那你这是浪费资源,问题也是不可预知的。

 

就我的认知,如果你在一个HttpRequest中发起新线程,并且还要等待结果的话,那你这是多余的,因为asp.net本身就是多并发的,根本不在乎你这个请求阻塞,你可以尽情地阻塞这个请求。

收获园豆:20
fyter | 初学一级 |园豆:172 | 2016-10-23 23:07

现在希望的是在一个请求同时做多件事情 

chenhp | 园豆:9 (初学一级) | 2016-10-24 08:56

@chenhp: 同样适用

fyter | 园豆:172 (初学一级) | 2016-10-24 09:55
其他回答(4)
0

高并发情况下只能这么做,fork 线程,由OS来控制线程;一般CPU不是问题,有问题的是内存和Disk IO

悦光阴 | 园豆:2251 (老鸟四级) | 2016-10-22 19:54

 内存应该够了 不写入磁盘 关键是 对IIS影响大么

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 21:06
0

这个方案靠谱,异步io能提高不少吞吐量。

czd890 | 园豆:14488 (专家六级) | 2016-10-22 20:26

你做过类似么

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 21:06

@chenhp: 自然是实践过,才告诉你

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2016-10-22 21:26

@calvinK: 访问量大的时候,性能影响大不

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 21:29

@chenhp:你是调用web api,性能在网络io,await tasks 很合适你。

所以,你觉得呢。明白原理才行

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2016-10-22 22:01

@calvinK: 线程开多了,内存CPU开销怕遭不住

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 22:02

@chenhp: 先实践test起来吧,靠猜是没有结果的

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2016-10-22 22:31

@calvinK: 我也想测试下,没那机会

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 22:32

@chenhp: 自己搭2台服务器,压测一下就完事了。。。没有机会,创造机会也要上嘛

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2016-10-22 22:56

@calvinK: 嘎嘎

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-10-22 22:56
0

最好做下评估,比如每秒可能会有多少请求及这种请求如果要并行需要耗时多少。

1.如果请求数不大,那么你直接丢线程池去处理就完了。

2.请求数较大,那么你可以将任务发到后续服务单独处理。

3.请求数很大,那么你可以将任务发送到队列,由后续服务来处理。

不太建议你直接开启一定量的线程去处理数量未知的任务,这样可能会导致资源得不到充分利用甚至更糟的请求积压。

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-24 09:56
0

担心API扛不住?

顾晓北 | 园豆:10898 (专家六级) | 2016-11-02 10:21

api 可能扛不住,这边的服务器也扛不住

支持(0) 反对(0) chenhp | 园豆:9 (初学一级) | 2016-11-02 10:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册