为什么异步代码被认为比同步快得多?

时间:2015-10-06 07:52:59

标签: javascript performance asynchronous

为什么同步代码被认为比异步代码更慢,更耗费资源?例如,nginx被认为比Apache快,而NodeJS应用程序被认为比PHP应用程序更快。

将同步代码编译成异步等效代码不应该是微不足道的吗?至少在JavaScript中,许多人使用像async这样的库来帮助编写同步代码。

修改:由于评论中有问题:同步代码如

byte[] buf = read(socket);
do_something(buf);

被认为是缓慢的,因为线程必须阻止从socket读取,而

read(socket, function(buf) {
    do_something(buf);
});

被认为很快。一方面,转换应该是微不足道的另一方面,两个代码必须等待read只需要一次产生线程,而在另一种情况下,返回主事件循环是必要的

1 个答案:

答案 0 :(得分:1)

异步/非阻塞设计不一定更快,但在某些情况下它们可以比同步/阻塞设计更好地扩展。因此,在处理大量并行事务时,它们可以“更快”。

这两种方法之间的性能差异有两个主要原因。一个原因是线程上下文切换的开销,另一个是某些平台上线程的内存消耗(例如Java)

I recently completed an article that explains why asynchronous can scale better.我希望它有所帮助。