Я пытаюсь использовать API ввода-вывода Stream.BeginWrite Async в .NET для высокой пропускной ситуации со многими короткими сообщениями. Таким образом, API разброса/сбора данных значительно сократит количество переключателей контекста (и использования ЦП). Использует ли этот API API LPBUFFERS Win32 вообще? Существует ли альтернативный API для ввода/вывода Scatter/Gather?Scatter/gather async socket I/O в .NET
ответ
Невозможно выполнить разнесение сокетов/собрать I/O в .NET. Согласно сообщению в блоге MSFT, в .NET 4.5 может быть аналогичный API (независимо от того, что есть ...)
Я был бы удивлен, если бы вы могли добраться до разброса/сбора api из BCL (это для l33t w1n32 haxx0rz, вы знаете?), Но всегда есть P/Invoke (что удивительно просто в использовании, ve найдено).
Если вы хотите, чтобы копаться в кишках рамках, есть несколько способов сделать это:
1) Отражатель
2) MS недавно открыли исходный код для отладки, вы можете шагнуть в него с VS2008, если вы включите опцию под отладкой/Options/General
3) Koders.com, кажется, хостинг источник рамочное тоже:
http://www.koders.com/csharp/fidCE09E83BE706D0BD370658C3785E82D3A13FC2CE.aspx?s=flush()#L109
Глядя на источники .net, принятый ответ кажется неправильным.
SocketAsyncEventArgs
имеет атрибут BufferList
. При том, что используется вместо атрибута Buffer
, который может только держать один непрерывный блок памяти, операции могут использовать разброс/собирать DMA, так как Socket.SendAsync(SocketAsyncEventArgs)
использует WSASend
внутренне, что
позволяет несколько буферов посыла быть указано, что делает его применимым к разбросу/сборки типа I/O
и Socket.SendAsync(SocketAsyncEventArgs)
использует WSARecv
, что
позволяет использовать несколько буферов приема необходимо указать, что делает его применимым к разбросу/собрать тип I/O
не имеет .NET 3.5 источников под рукой, но BufferList
существует с .net 3.5, поэтому разброс/сейсмограммой, возможно, был поддержан с .net 3.5. Минимальные требования к ОС для WSASend и WSARecv документируются как Windows Vista/Server 2003.
N.B. Я не знаю, какой поток вы используете, но NetworkStream.BeginWrite
отправляет один буфер в WSASend, поэтому вы не можете использовать его для разброса/сбора.
- 1. Java async socket IO
- 2. Socket IO net :: ERR_CONNECTION_REFUSED
- 3. Что такое «операция async IO» в .NET?
- 4. Capture Raw NIC IO от .NET Socket как .NET BitArray
- 5. Express Route & Socket io
- 6. Sailsjs Socket IO
- 7. socket io и cordova
- 8. Параметры запроса Socket IO
- 9. socket.broadcast.emit socket io
- 10. Laravel nodejs socket io
- 11. Perl IO :: Socket :: INET
- 12. socket io with ruby
- 13. Perl, IO :: Socket :: SSL, многопоточность
- 14. Socket IO повторно подключается?
- 15. socket io on heroku
- 16. Флажок Socket IO encryption
- 17. Альтернативный Socket IO Client
- 18. Socket io + MTQQ
- 19. Как удалить объект IO :: Async :: Listener (или его уведомитель) из события IO :: Async :: Loop в perl
- 20. write_timeout в IO :: Socket :: Timeout
- 21. Включает ли Socket IO Disk IO?
- 22. Async IO через процессы
- 23. Операции Async Commons-io?
- 24. Состояние Linux async IO?
- 25. ffmpeg async io?
- 26. ALSA - управление async IO
- 27. python async socket client
- 28. UDP Socket Async Receive
- 29. Async socket confusion
- 30. Нажмите события с Socket IO
У вас есть ссылка на это сообщение в блоге? –