以下两个链接似乎相互矛盾.我很快就会信任这些文档:
Request processing on the server works by default in a synchronous processing mode
It already is multithreaded.
我的问题:
哪个是对的.可以同步和多线程吗?
为什么文档会说以下内容?:
in cases where a resource method execution is known to take a long time to compute the result, server-side asynchronous processing model should be used
如果文档是正确的,为什么默认操作是同步的?对于用户体验,默认情况下,所有请求在客户端javascript上都是异步的,因此服务器端的默认操作也应该是异步的.
如果客户端不需要按特定顺序提供请求,那么谁在乎操作的“昂贵”.不应该所有操作都只是异步吗?
解决方法:
Request processing on the server works by default in a synchronous processing mode
每个请求都在一个单独的线程上处理.该请求被认为是同步的,因为该请求会保留线程,直到请求完成处理.
It already is multithreaded.
是的,服务器(容器)是多线程的.对于每个进入的请求,都会从线程池中获取一个线程,并且该请求与特定请求相关联.
in cases where a resource method execution is known to take a long time to compute the result, server-side asynchronous processing model should be used
是的,这样我们就不会阻止容器线程了.容器线程池中只有很多线程来处理请求.如果我们用长处理请求来保存它们,那么容器可能会用完线程,阻止其他请求进入.在异步处理中,Jersey将线程交给容器,并自己处理请求处理本身线程池,直到进程完成,然后将响应发送到容器,在那里它可以将响应发送回客户端.
If the client does not need to serve requests in a specific order, then who cares how “EXPENSIVE” the operation is.
不确定客户在这里做了什么.或者至少在您如何提出问题的背景下.抱歉.
Shouldn’t all operations simply be asynchronous?
如果所有请求都很快,不一定.虽然你可以为它做一个论证,但这需要性能测试,你可以相互抵制并从那里做出决定的数字.每个系统都不同.