[ 
https://issues.apache.org/jira/browse/PIO-193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16681515#comment-16681515
 ] 

ASF GitHub Bot commented on PIO-193:
------------------------------------

longliveenduro edited a comment on issue #495: [PIO-193] Async support for 
predict method and storage access, blocking code wrapped in blocking construct
URL: https://github.com/apache/predictionio/pull/495#issuecomment-437362562
 
 
   @dszeto @takezoe This would be one possible solution to be nearly 100% 
backward compatible. With "nearly" I mean that an engine implementor has to add 
"override" to its implementation of predictBase() / predict() because in this 
suggestion I implement it with a default NotImplementedError stating that the 
method is deprecated. But this should only be necessary when the engine 
developer recompiles his engine. With that "override" hint he then also gets a 
good hint to move on to the new async implementation. Already compiled engines 
should still work as the simply override the new default impl. of 
predict/predictBase. predictBaseAsync and predictAsync simply delegate to the 
old methods and wrapping a blocking block around it to tell the standard scala 
execution context to execute them in a second, much bigger threadpool. See 
chapter "Blocking" from 
https://www.beyondthelines.net/computing/scala-future-and-execution-context/
   
   If you want we could just drop this default implementation of 
BaseAlgorithm.predictBase / Subclass.predict and would have 100% compatibility 
but then even a new async implementation would have to implement these old 
method signatures with a dummy.
   
   Other solution I did think of were using some runtime information (things 
like checking dynamically if a method is present or not) but I decided not to 
use that, because these kind of lookups are usually very slow and IMHO breaks 
type saftey.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Use async requests to storage whenever possible
> -----------------------------------------------
>
>                 Key: PIO-193
>                 URL: https://issues.apache.org/jira/browse/PIO-193
>             Project: PredictionIO
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 0.13.0
>            Reporter: Chris Wewerka
>            Priority: Major
>
> The storage access in Prediction IO uses blocking drivers and uses the 
> standard scala ExecutionContext which is a bounded ForkJoin ThreadPool. This 
> leads to bad usage of machines resources.
>  
> See also 
> [https://lists.apache.org/thread.html/f14e4f8f29410e4585b3d8e9f646b88293a605f4716d3c4d60771854@%3Cuser.predictionio.apache.org%3E]
> and https://jira.apache.org/jira/browse/PIO-182



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to