On Thu, 2014-03-27 at 14:13 +0530, Sajith Dilshan wrote: > Hi Oleg, > > Thank you for the reply. But I'm still a bit confused about the answer. So > let me rephrase my question. When a worker thread enters > outputReady(IOSession session) method with that session object, does that > worker thread acquires a lock on OP_WRITE operation for that particular > session object so that any other worker thread can't perform OP_WRITE > operation on that session object? >
Only I/O event dispatch threads managed by the I/O reactor should ever call IOEventDispatch#outputReady. It is also guaranteed by the framework that only one I/O dispatch thread can interact with the same I/O session at a time. If your application create additional worker threads those threads should never call IOEventDispatch#outputReady. They should only interact with IOSession, update its state but let the I/O dispatch threads do the actual reading and writing. > As an example, assume there are two worker threads, Thread_A and Thread_B. > Further, there is a IOSession object session_123 with its event set as > OP_WRITE. Both threads, Thread_A and Thread_B see that OP_WRITE event is > set for session_123 and can the both threads (Thread_A, Thread_B) enter the > outputReady(IOSession session) method at the same time with the session_123 > being the parameter passed to that method and execute the method's body? > See above. Worker threads should update IOSession's state (such as shared I/O buffer) but the actual writing should be performed by the I/O dispatch thread. There is a section on asynchronous I/O control for HTTP connections you may find useful: http://hc.apache.org/httpcomponents-core-4.3.x/tutorial/html/nio.html#d5e614 Oleg > > On Thu, Mar 27, 2014 at 1:52 PM, Oleg Kalnichevski <ol...@apache.org> wrote: > > > On Wed, 2014-03-26 at 23:00 +0530, Sajith Dilshan wrote: > > > Hi everyone, > > > > > > When I set the OP_WRITE event on a particular instance of > > > org.apache.http.nio.reactor.IOSession, a worker thread will pick up that > > > IOSession and will execute the outputReady(IOSession session) method of > > the > > > respective org.apache.http.nio.reactor.IOEventDispatch implementation. > > > > > > My question is that, is it possible for more than one thread to execute > > > outputReady(IOSession session) method for the same instance of IOSession > > at > > > the same time? > > > > it is possible on multi CPU core systems. > > > > > Does a worker thread acquires a lock before executing > > > outputReady(IOSession session) method for a particular IOSession > > instance? > > > > > > > Yes, it does. Access to IOSession's internal structures is synchronized. > > IOSession-s are fully thread safe. > > > > Oleg > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org