同样的一个空方法,遍历1000000次,BeginInvoke用了3秒多
异步还没有同步快吗?
在你的这个场景下当然, 异步有上下文的切换, 多个上下文对象的创建和GC等. 自然慢的得多.
异步在什么情况下有优势?
例如要等待IO(例如等待数据库响应, 网络响应, 磁盘响应), 线程暂停x秒之类的类似情况.
io举例:
100并发同步读取: 系统要维持100个thread同步等待io返回.
100并发异步读取: 请求发出去之后进入异步等待(保存当前的上下文信息, 释放线程), io返回后从threadpool里面获得线程并恢复上下文信息激活异步调用. 这样子系统只要维护少量的thread. 大概可以这么理解.
谢谢您的讲解。
如果我在上面的代码中的Calc函数中写了比较复杂的业务处理逻辑,会不会异步会占优势一些?
@寻找薛定谔的猫:
假设你的calc方法里面有类似网络,文件io等待之类的, 1000000个并发执行很可能程序要直接挂逼的. 所以不一定是恰当的.
假设你的calc方法里面都是cpu密集型计算(比如加解密)并且你的host是多核的, "有可能"
会提高性能(如果threadpool设置合理的化.)
要更好的评估该怎么做, 还是需要尽量提供更多有效信息 哈哈. 总之一句话 需要具体问题具体分析.
@czd890: 谢谢老师
单个线程异步不一定会比同步块,异步不是加快程序运行时间,异步只是提高了服务器的吞吐率,简单就是提高了线程的利用效率,不让线程闲置
谢谢老师