我有一个大约10万用户的列表,我需要为他们中的每一个执行同步WCF呼叫,我需要尽快完成列表.根据服务器状态的不同,每次WCF调用大约为200ms-1s.我想用Parallel.For
英镑,但有没有更好的办法?
我有一个大约10万用户的列表,我需要为他们中的每一个执行同步WCF呼叫,我需要尽快完成列表.根据服务器状态的不同,每次WCF调用大约为200ms-1s.我想用Parallel.For
英镑,但有没有更好的办法?
阻塞IO并不难于并行化,因为它占用了线程,而且线程的开销相对较大.此外,如果所有工作都转到相同的后端,增加并行度通常可以提高性能,因为这会增加服务器的管理费用并遇到瓶颈.
IMO这里真正的问题是工作单元的大小,在这里听起来您需要 for each rexord执行一个API调用;as close to the backend as possible0批(比方说)as close to the backend as possible个记录通常比as close to the backend as possiblek单个操作的性能要高得多.如果是我,我会考虑将其重构为批处理API.如果底层服务无法更改,另一种 Select 是运行编排服务as close to the backend as possible(理想情况下,相同的框),该服务至少可以接收批并在本地展开它们,从而最大限度地减少延迟开销.但是请注意,如果延迟不是当前问题的一个重要因素,这将无济于事:如果200ms-1s仅仅是由于服务器实现缓慢,那么you probably can't do much to work around that(可能除外...投入时间让它变得不那么慢).
这里的第二个关注点是异步;异步可能很重要(尤其是服务器端),但在这种情况下,它不是我关注的重点.