我尝试在Perl中创建一个并行处理的Web服务器。
侦听不是纯套接字 - 因此没有文件句柄,它是实现HTTP服务器(GLOB)的对象。
接受后,我再次获得GLOB以进行客户端连接。
由于GLOB,我无法将其传递给thead :: shared的工作线程。
我可以动态创建踏板并通过参数将它们提供给它们。但是创建线程并不利于性能,因此我希望有一个固定的已经在等待的工作池。
那么如何以优雅的方式将GLOB传递给已经运行的线程呢? 序列化为DB,文件,IPC,......效率不高。
当然我可以做一个大的重新设计(fork,IPC,socket,......)但这不是问题。
谢谢!
答案 0 :(得分:0)
嗯,没有一些示例代码,很难更具体。
但是将工作交给工人的标准方法是使用[assembly: ExportRendererAttribute(typeof(CustomPicker), typeof(CustomPickerRenderer))]
namespace <myapp>.Droid.Controls.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
Control?.SetPadding(20, 20, 20, 20);
if (e.OldElement != null || e.NewElement != null)
{
var customPicker = e.NewElement as CustomPicker;
Android.Graphics.Color phCol = customPicker.PlaceholderColour.ToAndroid();
Android.Graphics.Color textCol = customPicker.TextColour.ToAndroid();
Android.Graphics.Color bgCol = customPicker.BackgroundColour.ToAndroid();
Control.SetBackgroundColor(bgCol);
Control.SetHintTextColor(phCol);
Control.SetTextColor(textCol);
}
}
}
}
。
如果它只是一个文件描述符,你可以Thread::Queue
它。如果它有点复杂(例如对象或哈希),您可以使用enqueue
和Storable
/ freeze
。你可能正在看那个,因为你似乎在谈论一个对象。
但我不会太担心太多关于你的效率问题 - 它可能没有你想象的那么大。您是否正在分析您的代码?