+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

با توجه به اینکه فراخوانی پایگاه داده (برای مثال MySQL) با استفاده از JDBC ذاتا blocking است، مزیت استفاده از Promise چیست؟

    public static Promise<Proposal> findKeynote() {
        return Promise.promise(new Function0<Proposal>(){
            @Override
            public Proposal apply() throws Throwable {
                return find.where().eq("type", SessionType.Keynote).findUnique();
            }
            
        }, ctx ).recover(new Function<Throwable, Proposal>() {

            @Override
            public Proposal apply(Throwable t) throws Throwable {
                Logger.error("failed to feth keynote information", t);
                Proposal s = new Proposal();
                s.title = "COMING SOON!";
                return s;
            }
            
        }, ctx);
    }
مربوط به این پاسخ: تفاوت Result و Promise در Play framework

1 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)

درست است که با این کار کماکان فراخوانی پایگاه داده با استفاده از JDBC یک عملیات blocking است ولی استفاده از Promise در کد بالا دو مزیت زیر را دارد:

  • thread های مخصوص request handling در Play Framework آزاد می شود و می تواند به سایر درخواست ها جواب دهد بنابراین سیستم می تواند درخواست های بیشتری را پاسخ دهد.
  • همانطور که در کد مشخص است می توان با متد recover، در دسترس نبودن پایگاه داده (failure) را بصورت کاملا مجزا مدیریت کنیم.

سوالات مشابه

0 امتیاز
1 پاسخ 239 بازدید
+1 امتیاز
1 پاسخ 381 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط kashi (7.2هزار امتیاز)
+1 امتیاز
1 پاسخ 333 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط phonix4466 (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 2.4هزار بازدید
+1 امتیاز
1 پاسخ 449 بازدید
+1 امتیاز
1 پاسخ 508 بازدید
...