为什么同步代码被认为比异步代码更慢,更耗费资源?例如,nginx被认为比Apache快,而NodeJS应用程序被认为比PHP应用程序更快。
将同步代码编译成异步等效代码不应该是微不足道的吗?至少在JavaScript中,许多人使用像async这样的库来帮助编写同步代码。
修改:由于评论中有问题:同步代码如
byte[] buf = read(socket);
do_something(buf);
被认为是缓慢的,因为线程必须阻止从socket
读取,而
read(socket, function(buf) {
do_something(buf);
});
被认为很快。一方面,转换应该是微不足道的另一方面,两个代码必须等待read
只需要一次产生线程,而在另一种情况下,返回主事件循环是必要的
答案 0 :(得分:1)
异步/非阻塞设计不一定更快,但在某些情况下它们可以比同步/阻塞设计更好地扩展。因此,在处理大量并行事务时,它们可以“更快”。
这两种方法之间的性能差异有两个主要原因。一个原因是线程上下文切换的开销,另一个是某些平台上线程的内存消耗(例如Java)
I recently completed an article that explains why asynchronous can scale better.我希望它有所帮助。