Pie*_*ald 6 concurrency asynchronous amazon-web-services aws-lambda
我已经搜索过任何答案,但我读到的所有内容都是关于asyncNode 中的并发 lambda 执行和关键字语法,但是我找不到有关 lambda 实例执行的信息。
这是因为我在一次聚会上,有人提到 lambda 实例(即由 AWS 托管的包含我的代码的临时容器)一次只能执行一个请求。这意味着如果我有 5 个请求进来(为了简单起见,让我们说一个已经热的实例)它们都将在一个单独的实例中运行,即在 5 个单独的容器中。
对我来说,香蕉的事情是这破坏了异步编程多年的发展。从 2009 年开始,node.js 开始普及 i/o 编程,因为对于 Mill CRUD 应用程序的无聊运行,您的大部分请求时间都花在等待外部数据库调用或其他事情上。编写异步代码允许单个执行线程看似同时执行多个请求。虽然 node 没有发明它,但我认为可以说它普及了它,并且在过去十年中一直是后端技术发展的巨大推动力。许多语言都添加了一些特性来使异步编程更容易(回调/任务/承诺/未来或任何你想调用它们的东西),并且 web 服务器已经从每个请求的单个线程转移到基于事件循环(节点、顶点、kestrel 等)去年的模型。
无论如何,历史课已经足够了,我的观点是,如果我听到的是真的,那么使用 lambdas 进行开发会将大部分内容抛之脑后。如果 lambda 运行时永远不会通过我正在运行的实例发送多个请求,那么以异步方式编程只会浪费资源。比如说我在说 C#,而我的 lambda 是用于检索小部件。然后这段代码var response = await db.GetWidgets()实际上是低效的,因为它将当前线程上下文推送到堆栈上,因此它可以在等待该调用返回时允许其他代码执行。由于在原始请求完成之前不会调用其他请求,因此以同步样式编程更有意义,除了可以进行并行调用的地方。
这样对吗?
如果是这样,我真的很震惊,它没有被更多地讨论。我在过去几年中看到了异步编程的范式转变,这完全改变了这一点。
TL;DR:lambda 真的只允许每个实例一次执行一个请求吗?如果是这样,这将结束服务器开发向异步代码的重大转变。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |