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

Performance 并发代码中的任务切换是否会导致比同步执行更快的代码?,performance,concurrency,Performance,Concurrency,我理解并发性不是并行性,但我认为这是我对仅使用单个线程(go/node)的环境中的并发速度感到困惑的根源 如果每件事都在一个进程中运行,并且调度器在不同的并发任务之间不断切换,那么这种不断切换所产生的开销会不会导致比同步完成每件事时更慢的代码执行 我知道,当您需要非阻塞代码时,并发有它的优势,例如,web服务器可以在服务数千个请求之间切换,而不是只关注一个请求,它在这方面非常出色;但是,我很难理解它是否真的更快,或者并发性是否看起来更快。当存在一些IO绑定的活动(例如发送到网络和从网络接收数据)

我理解并发性不是并行性,但我认为这是我对仅使用单个线程(go/node)的环境中的并发速度感到困惑的根源

如果每件事都在一个进程中运行,并且调度器在不同的并发任务之间不断切换,那么这种不断切换所产生的开销会不会导致比同步完成每件事时更慢的代码执行


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

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


异步IO的另一个优点是线程—它是无线程的。这样可以节省内存和操作系统资源。例如,这是解决C10M问题的唯一方法。

谁说速度更快@RemusRusanu我一直认为它更快,直到我花了一些时间考虑它。我只是想知道我现在是对还是错。当有一些IO绑定的活动(例如发送到网络和从网络接收数据)时,并发代码是有效的。如果没有并发性,您的单个线程必须等待调用完成。纯CPU绑定的活动不能从单个线程上的并发性中获益(这可能会增加不必要的开销),但如果工作负载可以分布在多个并行工作的CPU上,则可以从多线程中获益。@好的,谢谢。正是我想知道的。异步IO的优点是线程—它是无线程的。这样可以节省内存和操作系统资源。例如,这是解决C10M问题的唯一方法。