2013-11-30 3 views
3

Предположит, что у меня есть многопоточная программа, в которой каждый из 2 нитей:Справедливость сокета write() в двух параллельных соединениях?

  • имеет свой собственный сокет socket_fd в умолчанию (блокирующий) режим
  • повторно передают данные с использованием write(socket_fd, data, data_len) таким образом, что сеть становится узким местом
  • размер данных, передаваемых на write (то есть data_len), всегда равен MSS; для простоты предположим data_len = 500

Я задаюсь вопросом о справедливости записи предполагающих единую сетевую карту, то есть: если поток 2 звонки писать 9х реже, есть слабая гарантия того, что данные, передаваемые по теме 2 будет составлять примерно от общей суммы данных, отправленной в течение разумного срока (т.е. поток 2 в конечном итоге отправит свои данные, хотя нить 1 сохраняет основной носитель очень занятым, постоянно отправляя чрезмерное количество данных)?

Меня больше интересует случай, когда поток 1 (который отправляет больше данных) использует TCP, а в потоке 2 используется DCCP. Тем не менее, ответы на сценарии, в которых поток 2 использует UDP и TCP, также приветствуются.

+0

Я думаю, вы можете использовать 'send()' (возможно, с 'flags'). –

ответ

2

Это зависит от queuing discipline, который рассылает исходящие пакеты по сетевому интерфейсу. По умолчанию pfifo_fast, the default Linux qdisc организует исходящие пакеты в очереди fifo, индексированные полем ToS. Исходящие пакеты с одинаковыми ToS отправляются в том порядке, в котором ядро ​​получает пакеты из приложений.

+0

Вы говорите, что все эти пакеты попадают в одну и ту же очередь FIFO, независимо от протокола, который они используют? Кроме того, они используют один и тот же исходящий пакетный буфер в отношении используемого транспортного протокола? – eold

+0

@leden Они идут в ту же очередь ToS независимо от протокола. –

+0

@leden Не уверен, какой пакетный буфер вы имеете в виду. Каждый пакет записывается в свой собственный [буфер сокета] (http://vger.kernel.org/~davem/skb.html), буферы привязаны к списку. Диспетчер очередей поддерживает список этих буферов. –

Смежные вопросы