并发代码中的任务切换是否导致代码比同步执行更快?

时间:2016-02-11 15:09:57

标签: performance concurrency

我理解并发性并不是并行性,但我认为这是我在仅使用单个线程(go / node)的环境中对并发速度产生混淆的原因。

如果一切都在一个进程中运行,并且调度程序在不同的并发任务之间不断切换,那么这种常量切换产生的开销不会导致代码执行速度慢于同步完成所有内容吗?

我知道,当您需要非阻塞代码时,并发性具有优势,例如,在服务数千个请求之间切换的Web服务器,而不是只关注一个请求,并且它在这方面很有启发性;但是,我很难理解它是否真的更快,或者并发只是出现更快。

1 个答案:

答案 0 :(得分:0)

当存在一些IO绑定活动(例如,从网络发送和接收数据)时,并发代码是高效的。如果没有并发性,您的单个线程必须等待完成调用才能执行任何操作。纯CPU绑定活动不会受益于单个线程上的并发(这可能会增加不必要的开销),但如果工作负载可以分布在多个并行工作的CPU上,则可以从多线程中受益。

异步IO的另一个优点是线程无线程。这节省了内存和操作系统资源。这是解决C10M问题的唯一方法。