我不明白事件循环在 spring webflux 中是如何工作的
I can't understand how event loop works in spring webflux
我正在尝试了解响应式编程以及事件循环的工作原理。只要我能理解何时向应用程序发送新的 HTTP 请求,该请求就会拆分为事件。每个事件都由这个事件循环处理,并且为每个事件注册一个回调。完成此事件后,结果将返回到请求。但是有多少线程处理了这个请求,有多少线程在这个事件循环中。
默认情况下 spring web flux 使用 reactor-netty 作为底层 Http 客户端库,它本身是著名的 Netty 客户端事件循环实现的反应式实现。要了解有关其工作原理的更多信息,您可以在此处参考详细信息 https://livebook.manning.com/book/netty-in-action/chapter-7/。
你可以认为所有请求都由有限的线程处理,通常是实际处理器线程的 2 或 4 倍,每个 http 客户端请求都包装在一个对象中,每个事件循环线程都可以从 Java堆并做一些工作并将对象添加回内存。
一旦在端口上收到响应,事件循环再次从内存(连接池)中获取对象并使用 Jackson 将响应数据从 ByteBuffers 反序列化为对象。
事件循环在每个 os 中相应地实现,例如 linux 的 epoll,macOS 的 kqueue 和 Java NIO 作为默认实现 OS agnostic.
我正在尝试了解响应式编程以及事件循环的工作原理。只要我能理解何时向应用程序发送新的 HTTP 请求,该请求就会拆分为事件。每个事件都由这个事件循环处理,并且为每个事件注册一个回调。完成此事件后,结果将返回到请求。但是有多少线程处理了这个请求,有多少线程在这个事件循环中。
默认情况下 spring web flux 使用 reactor-netty 作为底层 Http 客户端库,它本身是著名的 Netty 客户端事件循环实现的反应式实现。要了解有关其工作原理的更多信息,您可以在此处参考详细信息 https://livebook.manning.com/book/netty-in-action/chapter-7/。
你可以认为所有请求都由有限的线程处理,通常是实际处理器线程的 2 或 4 倍,每个 http 客户端请求都包装在一个对象中,每个事件循环线程都可以从 Java堆并做一些工作并将对象添加回内存。
一旦在端口上收到响应,事件循环再次从内存(连接池)中获取对象并使用 Jackson 将响应数据从 ByteBuffers 反序列化为对象。
事件循环在每个 os 中相应地实现,例如 linux 的 epoll,macOS 的 kqueue 和 Java NIO 作为默认实现 OS agnostic.