您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關服務器中如何使用特定的執行程序來阻止操作,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
使用特定的執行程序來阻止操作
因為一個緩慢的操作而使整個服務器變得無響應,這通常不是開發人員想要的。不幸的是,對于RPC,響應時間通常是不可預測的。
假設服務器有100個工作線程,有一個端點,稱為100 RPS。在內部,它發出一個RPC調用,通常需要10毫秒。在某個時間點,此RPC的響應時間變為2秒,在峰值期間服務器能夠做的惟一的一件事就是等待這些調用,而其他端點則無法訪問。
@GET @Path("/genre/{name}") @Produces(MediaType.APPLICATION_JSON) public Response getGenre(@PathParam("name") String genreName) { Genre genre = potentiallyVerySlowSynchronousCall(genreName); return Response.ok(genre).build(); }
解決這個問題最簡單的方法是提交代碼,它將阻塞調用變成一個線程池:
@GET @Path("/genre/{name}") @Produces(MediaType.APPLICATION_JSON) public void getGenre(@PathParam("name") String genreName, @Suspended AsyncResponse response) { response.setTimeout(1L, TimeUnit.SECONDS); executorService.submit(() -> { Genre genre = potentiallyVerySlowSynchronousCall(genreName); return response.resume(Response.ok(genre).build()); } ); }
關于“服務器中如何使用特定的執行程序來阻止操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。