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

Benedict commented on CASSANDRA-8457:
-------------------------------------

bq. The only way to avoid it is to lock while checking the queue empty 
condition and updating the needs wakeup field, or to have a 1:1 mapping between 
sockets and dispatch threads (AKA not SEP). This would force producers to lock 
on task submission as well. I don't see how the dispatch task can atomically 
check that there is no work to do and set the needs wakeup flag at the same 
time. At that point is there a reason to use a lock free queue?

{code}
    private Runnable dispatchTask = new Runnable() {
        @Override
        public void run() {
            while (true)
            {
                while (!backlog.isEmpty()) 
                    dispatchQueue();

                needsWakeup = true;
                if (backlog.isEmpty() || 
!needsWakeupUpdater.compareAndSet(OutboundTcpConnection.this, TRUE, FALSE))
                    return;
            }
        }
    };
{code}

> nio MessagingService
> --------------------
>
>                 Key: CASSANDRA-8457
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8457
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Core
>            Reporter: Jonathan Ellis
>            Assignee: Ariel Weisberg
>              Labels: performance
>             Fix For: 3.0
>
>
> Thread-per-peer (actually two each incoming and outbound) is a big 
> contributor to context switching, especially for larger clusters.  Let's look 
> at switching to nio, possibly via Netty.



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

Reply via email to