You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2014/09/16 23:31:33 UTC

[jira] [Created] (UIMA-4013) Reduce unneeded fixed flow controller sync contention

Marshall Schor created UIMA-4013:
------------------------------------

             Summary: Reduce unneeded fixed flow controller sync contention
                 Key: UIMA-4013
                 URL: https://issues.apache.org/jira/browse/UIMA-4013
             Project: UIMA
          Issue Type: Improvement
          Components: Core Java Framework
    Affects Versions: 2.6.0SDK
            Reporter: Marshall Schor
            Priority: Minor
             Fix For: 2.6.1SDK


The Fixed Flow Controller is designed to allow one instance to be used by multiple copies of a UIMA pipeline, initialized from the same context.   In this case, only one initialize call is done; the others are no-ops.  The instance contains one update-able ArrayList - the list of delegates.  This array is normally only "read", but there are two defined interfaces to allow dynamically altering it (addAnalysisEngines, and removeAnalysisEngines). The current impl of this is a synchronized list.  For the 99.99% of cases (reading), this sync is not necessary, and causes some observable sync contention.  

Change this to a non-sync'ed "CopyOnWrite" implementation, to avoid this contention.  The downside is that current Flow objects in use while after this call occurs will not see the update, but new ones will. This is probably a good thing, because it seems that incorrect flows might occur if this was changed while flows were in-progress.  The documentation currently says these methods are not currently called because UIMA doesn't support dynamically adding or removing analysis engines to/from an aggregate.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)