+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 پاسخ 233 بازدید
+1 امتیاز
1 پاسخ 373 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط kashi (7.2هزار امتیاز)
+1 امتیاز
1 پاسخ 326 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط asg.mojtaba (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 2.4هزار بازدید
+1 امتیاز
1 پاسخ 442 بازدید
+1 امتیاز
1 پاسخ 497 بازدید
...