Perl-Threads:在线程之间共享GLOB

时间:2018-02-05 12:12:06

标签: multithreading perl

我尝试在Perl中创建一个并行处理的Web服务器。

侦听不是纯套接字 - 因此没有文件句柄,它是实现HTTP服务器(GLOB)的对象。

接受后,我再次获得GLOB以进行客户端连接。

由于GLOB,我无法将其传递给thead :: shared的工作线程。

我可以动态创建踏板并通过参数将它们提供给它们。但是创建线程并不利于性能,因此我希望有一个固定的已经在等待的工作池。

那么如何以优雅的方式将GLOB传递给已经运行的线程呢? 序列化为DB,文件,IPC,......效率不高。

当然我可以做一个大的重新设计(fork,IPC,socket,......)但这不是问题。

谢谢!

1 个答案:

答案 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它。如果它有点复杂(例如对象或哈希),您可以使用enqueueStorable / freeze。你可能正在看那个,因为你似乎在谈论一个对象。

但我不会太担心太多关于你的效率问题 - 它可能没有你想象的那么大。您是否正在分析您的代码?