diff options
author | vnugent <public@vaughnnugent.com> | 2023-12-30 21:15:51 -0500 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2023-12-30 21:15:51 -0500 |
commit | 484c7bc63baab39904a1a715d199f879fd7a067a (patch) | |
tree | 949383bee253c5094536468be298c1ab1c03f7bf /lib/Plugins.Essentials.ServiceStack | |
parent | a241620dd73f97496855284cf1fb1503debd28ab (diff) |
tcp lib refactor, hardware accelerated memcopy, service stack features
Diffstat (limited to 'lib/Plugins.Essentials.ServiceStack')
-rw-r--r-- | lib/Plugins.Essentials.ServiceStack/src/Construction/HttpServiceStackBuilder.cs | 16 | ||||
-rw-r--r-- | lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs | 21 |
2 files changed, 31 insertions, 6 deletions
diff --git a/lib/Plugins.Essentials.ServiceStack/src/Construction/HttpServiceStackBuilder.cs b/lib/Plugins.Essentials.ServiceStack/src/Construction/HttpServiceStackBuilder.cs index 91184bd..f100c1d 100644 --- a/lib/Plugins.Essentials.ServiceStack/src/Construction/HttpServiceStackBuilder.cs +++ b/lib/Plugins.Essentials.ServiceStack/src/Construction/HttpServiceStackBuilder.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Essentials.ServiceStack @@ -51,6 +51,7 @@ namespace VNLib.Plugins.Essentials.ServiceStack.Construction private Func<ServiceGroup, IHttpServer>? _getServers; private Func<IPluginStack>? _getPlugins; private IManualPlugin[]? manualPlugins; + private bool loadConcurrently; /// <summary> /// Uses the supplied callback to get a collection of virtual hosts @@ -121,6 +122,17 @@ namespace VNLib.Plugins.Essentials.ServiceStack.Construction } /// <summary> + /// Sets the load concurrency flag for the plugin stack + /// </summary> + /// <param name="value">True to enable concurrent loading, false for serial loading</param> + /// <returns>The current instance for chaining</returns> + public HttpServiceStackBuilder LoadPluginsConcurrently(bool value) + { + loadConcurrently = value; + return this; + } + + /// <summary> /// Builds the new <see cref="HttpServiceStack"/> from the configured callbacks /// </summary> /// <returns>The newly constructed <see cref="HttpServiceStack"/> that may be used to manage your http services</returns> @@ -165,7 +177,7 @@ namespace VNLib.Plugins.Essentials.ServiceStack.Construction plugins ??= new EmptyPluginStack(); #pragma warning restore CA2000 // Dispose objects before losing scope - return new (domain.GetListener(), plugins, manualPlugins); + return new (domain.GetListener(), plugins, manualPlugins, loadConcurrently); } /* diff --git a/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs b/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs index 8a4e801..c2ff1e4 100644 --- a/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs +++ b/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Essentials.ServiceStack @@ -40,7 +40,8 @@ using VNLib.Plugins.Attributes; namespace VNLib.Plugins.Essentials.ServiceStack { - internal sealed record class PluginStackInitializer(PluginLoadEventListener Listener, IPluginStack Stack, IManualPlugin[] ManualPlugins) : IPluginInitializer + internal sealed record class PluginStackInitializer(PluginLoadEventListener Listener, IPluginStack Stack, IManualPlugin[] ManualPlugins, bool ConcurrentLoad) + : IPluginInitializer { private readonly LinkedList<IManagedPlugin> _managedPlugins = new(); private readonly LinkedList<ManualPluginWrapper> _manualPlugins = new(); @@ -88,8 +89,20 @@ namespace VNLib.Plugins.Essentials.ServiceStack } } - //Load stage, load only initialized plugins - Parallel.ForEach(_loadedPlugins, wp => LoadPlugin(wp, debugLog)); + /* + * Load stage, load only initialized plugins. + * + * Optionally single-threaded or parallel + */ + + if (ConcurrentLoad) + { + Parallel.ForEach(_loadedPlugins, wp => LoadPlugin(wp, debugLog)); + } + else + { + _loadedPlugins.TryForeach(_loadedPlugins => LoadPlugin(_loadedPlugins, debugLog)); + } return _loadedPlugins.ToArray(); } |