zoukankan      html  css  js  c++  java
  • linux 多进程并发服务__关于子进程回收的方法

    以TCPServ 服务程序来说:

    1)父进程:负责系统初始化,以及监听(listen),接受连接请求(accept);其中accept 默认阻塞调用。

    2)每接受一个连接请求,动态新建(fork)一个子进程,任务完成或客户端断开,服务子进程需要退

      出并收回系统资源。

    3)根据linux的设计子进程的收回需要父进程参与(wait调用),而此时附进程主要服务工作在监听

      客户端连接请求,同时阻塞在(accept)调用,所以父进程自身是无法"分身"去做子进程回收调用。

    4)现在的问题在于如何找到父进程的一个服务入口来完成进程回收调用。

      方法有2:

      1)利用信号机制,由操作系统产生软中断进入进程信号服务程序,执行子进程的回收调用。

        在附进程(signal/sigaction)注册SIGCHILD信号,在信号处理函数中执行waitpid调用。

        疑问:信号机制可靠吗?特别是应对大频率高负载的动态请求响应场景。

      2)在父进程中启动一个新的独立线程pthread,专门负责执行回收调用,此时使用wait阻塞

        调用比较合适,如果使用waitpid需要不停的循环等待。注意没有子进程时wait调用立即

        返回失败。(父进程在fork子进程时候,可以做一个登记).

    5)在很多情况下可以考虑用多线程并发代替多进程并发,省去了很多问题。

  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/Esperanto/p/5983628.html
Copyright © 2011-2022 走看看