+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 پاسخ 137 بازدید
+1 امتیاز
1 پاسخ 305 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط kashi (7.2هزار امتیاز)
+1 امتیاز
1 پاسخ 236 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط asg.mojtaba (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 2.3هزار بازدید
+1 امتیاز
1 پاسخ 340 بازدید
+1 امتیاز
1 پاسخ 349 بازدید
...