同步HTTP处理程序和异步HTTP处理程序之间是否存在性能差异?IHttpHandler vs IHttpAsyncHandler
为什么选择另一个?
有什么好处?
我正在分析一些球衣2.0代码,我对如何使用以下方法有疑问:
@Stateless
@Path("/mycoolstuff")
public class MyEjbResource {
…
@GET
@Asynchronous //does this mean the method executes on child thread ?
public void longRunningOperation(@Suspended AsyncResponse ar) {
final String result = executeLongRunningOperation();
ar.resume(result);
}
private String executeLongRunningOperation() { … }
}
Run Code Online (Sandbox Code Playgroud)
让我说在网络浏览器上我输入www.mysite/mycoolstuff这将执行方法,但我不明白asyncResponse用于@Asynchronous注释.从浏览器我怎么会注意到它的asychnronous?删除注释会有什么不同?在阅读文档后暂停注释我也不清楚它的用途.
是@Asynchronous注释只是告诉程序在新线程上执行此方法?做"新线程(.....)"是一种方便的方法吗?
更新:此注释使服务器无法挂在请求处理线程上.吞吐量可以更好.无论如何官方文档:
默认情况下,服务器上的请求处理在同步处理模式下工作,这意味着在单个I/O容器线程中处理请求的客户端连接.一旦处理请求的线程返回到I/O容器,容器就可以安全地假设请求处理已完成,并且可以安全地释放客户端连接,包括与连接关联的所有资源.该模型通常足以处理处理资源方法执行花费相对较短时间的请求.但是,如果已知资源方法执行需要很长时间来计算结果,则应使用服务器端异步处理模型.在此模型中,请求处理线程与客户端连接之间的关联被破坏.处理传入请求的I/O容器可能不再认为在请求处理线程返回时可以安全地关闭客户端连接.相反,需要公开用于显式挂起,恢复和关闭客户端连接的工具.请注意,使用服务器端异步处理模型不会改善客户端感知的请求处理时间.然而,通过将初始请求处理线程释放回I/O容器,同时请求可能仍在队列中等待处理或者处理可能仍在另一个专用线程上运行,它将增加服务器的吞吐量.已发布的I/O容器线程可用于接受和处理新的传入请求连接.
我有一个资源Class,@ManagedAsync方法类看起来像这样:
@Path("my-resource")
public class MyResource extends BaseResource{
private DatumDAO datumDAO;
public MyResource(DatumDAO datumDAO){
this.datumDAO = datumDAO;
}
public void cleanDatum(Datum datum){
//time taking operations
}
@GET
@ManagedAsync
@Path("/cleanup/{from}/{till}/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@UnitOfWork
public void cleanupDirtyData(@Suspended final AsyncResponse asyncResponse, @PathParam("from") DateTimeParam from,
@PathParam("till") DateTimeParam till) throws IOException{
logger.debug("will try to cleanup dirty data in range: " + from + " " + till);
List<Datum> data = datumDAO.getALlDirtyDatumInRange(from.get().toDate(), till.get().toDate());
Map<Long,String> cleanupMap = new HashMap<Long,String>();
for(Datum datum: data){
cleanDatum(datum);
cleanupMap.put(datum.getId(), …Run Code Online (Sandbox Code Playgroud) java ×2
jersey-2.0 ×2
.net ×1
asynchronous ×1
c# ×1
dropwizard ×1
httphandler ×1
rest ×1
synchronous ×1
web-services ×1