【问题标题】:Apache 2.4 MPM worker: Thread Init?Apache 2.4 MPM 工作者:线程初始化?
【发布时间】:2012-08-14 10:27:26
【问题描述】:

我正在编写一个 Apache 2.4 模块,并且正在使用 MPM worker。

是否有一个我可以使用的钩子在创建新线程时从该线程的上下文中调用?我需要对每个线程进行一些初始化。

(更一般地说,是否在某处记录了完整的钩子列表?)

【问题讨论】:

    标签: c linux apache pthreads


    【解决方案1】:

    “否”的简短回答,没有这样的钩子用于使用工作 MPM 进行线程初始化。 Apache 设计人员建议模块“尽可能与 MPM 无关”。关键概念是模块必须适合输入过滤器 - 内容生成 - 输出过滤器架构,独立于实际管理工作负载的 MPM。

    当然,在某些情况下,您需要知道自己在哪个环境中工作艰难

    我们正在解决类似的问题。当请求进入时,线程会被触发,它们运行 ap_hook_handler 中定义的钩子,据我所知,那是您的线程必须获得访问权限或分配它所需的资源才能为请求提供服务的时候。

    我听说 mod_rivet 有一个有趣的解决方案,可以创建自己的线程池并让它们与运行请求处理程序的 Apache 线程交换数据。

    【讨论】:

    • 是的,我阅读了 worker MPM 代码,它只是在 child_init 之后使用 pthreads api 启动其线程池。我使用的解决方案是在函数中拥有一个静态 thread_local 对象:X& f() { thread_local x; return x;,然后在构造函数中运行我的 thread_init 函数。这可行,但不幸的是,您在第一次请求该工作线程时支付 thread_init 时间(而不是在线程启动时立即支付)。
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多