后台需要调用多个不同的api获取数据,想采用多线程的方式,同时获取,以提高效率。有点担心在访问量大的时候,服务器会遭不住,问下有这方面经验的大神,这个解决方案靠谱么?还有其他更好地解决方案么!
相关问题
- WPF MVVMLight:在ViewModel中,开子线程为ObservableCollectio
- 并发编程中,什么是共享变量?
- 求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,
- C# 关于多线程的操作
- c# 父线程变量i在子线程中使用,父线程退出后,变量i在子线程中仍然正常,是什么原因?
应该用任务(Task)去做,由系统为你处理异步问题,而不是自己去管理线程。
即使用线程,也应该开固定数量的线程,保存到Application里,由你管理任务队列,分配任务。
如果你无法确定你的线程什么时候关闭,又无法确定有多少这样的请求,那你这是浪费资源,问题也是不可预知的。
就我的认知,如果你在一个HttpRequest中发起新线程,并且还要等待结果的话,那你这是多余的,因为asp.net本身就是多并发的,根本不在乎你这个请求阻塞,你可以尽情地阻塞这个请求。
最好做下评估,比如每秒可能会有多少请求及这种请求如果要并行需要耗时多少。
1.如果请求数不大,那么你直接丢线程池去处理就完了。
2.请求数较大,那么你可以将任务发到后续服务单独处理。
3.请求数很大,那么你可以将任务发送到队列,由后续服务来处理。
不太建议你直接开启一定量的线程去处理数量未知的任务,这样可能会导致资源得不到充分利用甚至更糟的请求积压。
这个方案靠谱,异步io能提高不少吞吐量。
担心API扛不住?
高并发情况下只能这么做,fork 线程,由OS来控制线程;一般CPU不是问题,有问题的是内存和Disk IO