在 I/O 完成时阻塞调用线程会降低性能并影响垂直可扩展性。
同步 I/O 操作会在 I/O 完成时阻塞调用线程。调用线程进入等待状态,在此期间无法执行有用工作,浪费处理资源。
常见的 I/O 示例包括:
- 从数据库或任何类型的持久化存储中检索或持久化数据。
- 向 Web 服务发送请求。
- 从队列中发布或检索消息。
- 向本地文件写入或读取。
这种反模式通常发生在以下原因:
- 它看起来是执行操作的直观方式。
- 应用程序需要从请求中获取响应。
- 应用程序使用的库仅提供同步的 I/O 方法。
- 外部库在内部执行同步 I/O 操作。单个同步 I/O 调用可能会阻塞整个调用链。