javascript - 在不需要时将函数编写为异步函数是否有好处?
问题描述
它写道:
使用异步代码但避免阻塞调用
异步编程是推荐的最佳实践,尤其是在涉及阻塞 I/O 操作时。
我有不包含“等待”行的函数。将这些函数编写为异步有好处吗?
解决方案
您引用的文档包含一些关于为什么这是一个好主意的提示。
使用异步代码但避免阻塞调用
异步编程是推荐的最佳实践,尤其是在涉及阻塞 I/O 操作时。
在 C# 中,始终避免在 Task 实例上引用 Result 属性或调用 Wait 方法。这种方法会导致线程 耗尽。
小费
如果您计划使用 HTTP 或 WebHook 绑定,请计划避免可能由 HttpClient 的不正确实例化导致的端口 耗尽。有关详细信息,请参阅如何在 Azure Functions 中管理连接。
当您有阻塞调用时,它们会占用一些资源,例如线程/端口。可以由各种功能共享。
例如说
- 您的实施取决于可以并行处理 1000 个请求的第 3 方服务。
- 您的工作进程数为 4
然后:
如果所有 4 个都触发了一些外部作业并等到它完成,那么您将只能并行运行其中的 4 个。如果您的用户希望能够并行运行 1000 个作业,则您必须扩展到(并支付)250 个应用程序实例。
如果每个函数都执行以下操作:
- 异步触发每个作业并记下作业 ID
- 在循环中检查每个作业 ID 的作业状态
然后,单个应用程序功能将能够并行处理 1000 个请求。
我有不包含“等待”行的函数。将这些函数编写为异步有好处吗?
异步仍然很好,除非你确定你已经考虑了所有未来的需求。
推荐阅读
- ruby - 如何使用 Ruby 中的拆分从数组中删除多个元素
- vba - 希望 excel 用户表单在下一个空白行中填充特定范围
- haskell - 在 Scotty do block 中添加打印
- python - 为什么删除按钮不能正常工作?在 python 和烧瓶中需要帮助
- r - 将第三个变量添加到 stat_density_2d 图中
- python-2.7 - 使用 Tensorflow 1.9 导入 NiftyNet 时出错
- html - 锚标签不可点击
- r - r中的时间序列:如何通过两个键合并两个数据帧,但只生成一列
- angular - Angular 6 - *ngFor 仅显示索引 0
- php - 向 composer psr-4 添加新的命名空间位置