Network socket concurrency (userland)

Ivan Voras ivoras at freebsd.org
Tue Nov 16 15:51:15 UTC 2010


On 11/16/10 16:19, Joerg Sonnenberger wrote:
> On Tue, Nov 16, 2010 at 03:37:59PM +0100, Ivan Voras wrote:
>> Are there any standard-defined guarantees for TCP network sockets
>> used by multiple threads to do IO on them?
>
> System calls are atomic relative to each other. They may be partially
> executed from the perspective of a remote system, e.g. due to
> segmentation, but one system call will finish before the next call of
> the same category is started.

It seems to me that with a multithreaded kernel and multithreaded 
userland that cannot really be guaranteed in general (and really should 
not be guaranteed for performance reasons), but maybe it's true for e.g. 
sockets if they are protected by a mutex or two within the kernel?

>> Specifically, will multiple write() or send() calls on the same
>> socket execute serially (i.e. not interfere with each other) and
>> blocking (until completion) even for large buffer sizes? What about
>> read() / recv()?
>
> All write operations are serialised against each other, just like all
> read operations are serialised against.

To what degree is such serialization standardized (by POSIX?)?



More information about the freebsd-hackers mailing list