Skip to content
代码片段 群组 项目
未验证 提交 d2c7b659 编辑于 作者: David Fowler's avatar David Fowler 提交者: GitHub
浏览文件

Remove the double dispatch on Windows for IO (#43449)

The windows IO thread pool was replaced with one that dispatches to the thread pool. As a result, we remove the extra thread pool dispatch that we originally had for windows because continuations for IO on windows ran on
the same thread that polls for IO.
上级 63fb7a86
No related branches found
No related tags found
无相关合并请求
......@@ -33,7 +33,7 @@ internal sealed partial class SocketConnection : TransportConnection
internal SocketConnection(Socket socket,
MemoryPool<byte> memoryPool,
PipeScheduler transportScheduler,
PipeScheduler socketScheduler,
ILogger logger,
SocketSenderPool socketSenderPool,
PipeOptions inputOptions,
......@@ -55,12 +55,7 @@ internal sealed partial class SocketConnection : TransportConnection
ConnectionClosed = _connectionClosedTokenSource.Token;
// On *nix platforms, Sockets already dispatches to the ThreadPool.
// Yes, the IOQueues are still used for the PipeSchedulers. This is intentional.
// https://github.com/aspnet/KestrelHttpServer/issues/2573
var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline;
_receiver = new SocketReceiver(awaiterScheduler);
_receiver = new SocketReceiver(socketScheduler);
var pair = DuplexPipe.CreateConnectionPair(inputOptions, outputOptions);
......
......@@ -56,15 +56,13 @@ public sealed class SocketConnectionContextFactory : IDisposable
{
var memoryPool = _options.MemoryPoolFactory();
var transportScheduler = options.UnsafePreferInlineScheduling ? PipeScheduler.Inline : new IOQueue();
// https://github.com/aspnet/KestrelHttpServer/issues/2573
var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline;
_settings[i] = new QueueSettings()
{
Scheduler = transportScheduler,
InputOptions = new PipeOptions(memoryPool, applicationScheduler, transportScheduler, maxReadBufferSize, maxReadBufferSize / 2, useSynchronizationContext: false),
OutputOptions = new PipeOptions(memoryPool, transportScheduler, applicationScheduler, maxWriteBufferSize, maxWriteBufferSize / 2, useSynchronizationContext: false),
SocketSenderPool = new SocketSenderPool(awaiterScheduler),
SocketSenderPool = new SocketSenderPool(transportScheduler),
MemoryPool = memoryPool,
};
}
......@@ -73,8 +71,6 @@ public sealed class SocketConnectionContextFactory : IDisposable
{
var memoryPool = _options.MemoryPoolFactory();
var transportScheduler = options.UnsafePreferInlineScheduling ? PipeScheduler.Inline : PipeScheduler.ThreadPool;
// https://github.com/aspnet/KestrelHttpServer/issues/2573
var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline;
_settings = new QueueSettings[]
{
new QueueSettings()
......@@ -82,7 +78,7 @@ public sealed class SocketConnectionContextFactory : IDisposable
Scheduler = transportScheduler,
InputOptions = new PipeOptions(memoryPool, applicationScheduler, transportScheduler, maxReadBufferSize, maxReadBufferSize / 2, useSynchronizationContext: false),
OutputOptions = new PipeOptions(memoryPool, transportScheduler, applicationScheduler, maxWriteBufferSize, maxWriteBufferSize / 2, useSynchronizationContext: false),
SocketSenderPool = new SocketSenderPool(awaiterScheduler),
SocketSenderPool = new SocketSenderPool(PipeScheduler.Inline),
MemoryPool = memoryPool,
}
};
......@@ -101,7 +97,7 @@ public sealed class SocketConnectionContextFactory : IDisposable
var connection = new SocketConnection(socket,
setting.MemoryPool,
setting.Scheduler,
PipeScheduler.Inline,
_logger,
setting.SocketSenderPool,
setting.InputOptions,
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册