小编laz*_*der的帖子

当 Flux 从 Spring Web 控制器返回时会发生什么?

我对反应式 API 比较陌生,并且很好奇当我们从 Web 控制器返回 Flux 时幕后发生了什么。

根据 spring-web 文档

响应式返回值的处理方式如下:

适应单值 Promise,类似于使用 DeferredResult。示例包括 Mono (Reactor) 或 Single (RxJava)。

适配流媒体类型(如application/stream+json或text/event-stream)的多值流,类似于使用ResponseBodyEmitter或SseEmitter。示例包括 Flux (Reactor) 或 Observable (RxJava)。应用程序还可以返回 Flux 或 Observable。

与任何其他媒体类型(例如 application/json)的多值流进行适配,类似于使用DeferredResult<List<?>>.

我创建了两个 API,如下所示:

@GetMapping("/async-deferredresult")
public DeferredResult<List<String>> handleReqDefResult(Model model) {
    LOGGER.info("Received async-deferredresult request");
    DeferredResult<List<String>> output = new DeferredResult<>();

    ForkJoinPool.commonPool().submit(() -> {
        LOGGER.info("Processing in separate thread");
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 10000   ; i++) {
            list.add(String.valueOf(i));
        }
        output.setResult(list);
    });

    LOGGER.info("servlet thread freed");
    return output; …
Run Code Online (Sandbox Code Playgroud)

project-reactor spring-webflux

11
推荐指数
1
解决办法
7124
查看次数

在同一进程中处理线程的id

以下代码用于打印2线程linux的进程id(ubuntu 14.04)

#include<pthread.h>
#include<stdio.h>
#include <unistd.h>

void* thread_function (void* arg)
{
    fprintf (stderr, "child thread pid is %d\n", (int) getpid ());
    /* Spin forever. */
    while (1);
    return NULL;
}

int main ()
{
    pthread_t thread; 
    fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
    pthread_create (&thread, NULL, &thread_function, NULL);
    /* Spin forever. */
    while (1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

main thread pid is 3614
child thread pid is 3614
Run Code Online (Sandbox Code Playgroud)

但是不应该是因为GNU/Linux的进程id不同,线程是作为进程实现的?

c linux pthreads

2
推荐指数
1
解决办法
1189
查看次数

标签 统计

c ×1

linux ×1

project-reactor ×1

pthreads ×1

spring-webflux ×1