Jonathan Ellis created CASSANDRA-4718:
-----------------------------------------

             Summary: More-efficient ExecutorService for improved throughput
                 Key: CASSANDRA-4718
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4718
             Project: Cassandra
          Issue Type: Improvement
            Reporter: Jonathan Ellis
            Priority: Minor


Currently all our execution stages dequeue tasks one at a time.  This can 
result in contention between producers and consumers (although we do our best 
to minimize this by using LinkedBlockingQueue).

One approach to mitigating this would be to make consumer threads do more work 
in "bulk" instead of just one task per dequeue.  (Producer threads tend to be 
single-task oriented by nature, so I don't see an equivalent opportunity there.)

BlockingQueue has a drainTo(collection, int) method that would be perfect for 
this.  However, no ExecutorService in the jdk supports using drainTo, nor could 
I google one.

What I would like to do here is create just such a beast and wire it into (at 
least) the write and read stages.  (Other possible candidates for such an 
optimization, such as the CommitLog and OutboundTCPConnection, are not 
ExecutorService-based and will need to be one-offs.)

AbstractExecutorService may be useful.  The implementations of 
ICommitLogExecutorService may also be useful. (Despite the name these are not 
actual ExecutorServices, although they share the most important properties of 
one.)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to