Эффективные сокеты Linux (DMA / ноль-копия)

В контексте использования в языках регулярные выражения действуют на строки, а не на строки. Таким образом, вы должны нормально использовать регулярное выражение, считая, что входная строка имеет несколько строк.

В этом случае заданное регулярное выражение будет соответствовать всей строке, так как «& lt; FooBar & gt;» настоящее. В зависимости от специфики реализации регулярного выражения значение $ 1 (полученное из «(. *)») Будет либо «fghij», либо «abcde\nfghij». Как говорили другие, некоторые реализации позволяют вам контролировать, является ли "." будет соответствовать новой строке, предоставив вам выбор.

Использование регулярных выражений на основе строк обычно используется для командной строки, например egrep.

30
задан 1 December 2009 в 18:05
поделиться

2 ответа

Недавно о linux-kernel говорили о предоставлении API для чего-то подобного, но камнем преткновения является то, что вы не можете DMA из обычных буферов пользовательского пространства на сетевую карту, потому что :

  • То, что выглядит как непрерывные данные в линейном адресном пространстве пользовательского пространства, вероятно, не являются непрерывными в физической памяти, что является проблемой, если сетевая карта не выполняет DMA с разбросом и сборкой;
  • На многих машинах, не на всех Адреса физической памяти поддерживают DMA. На данный момент у приложения пользовательского пространства нет возможности специально запросить буфер с поддержкой DMA.

В последних ядрах

19
ответ дан 28 November 2019 в 00:27
поделиться

Насколько я знаю, вы используете наиболее эффективные доступные вызовы, если не можете использовать sendfile (2). Различные аспекты эффективного высокопроизводительного сетевого кода охватываются Проблема C10K

1
ответ дан 28 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: