zoukankan      html  css  js  c++  java
  • 2 service and configuration design dimensions——ACE读书笔记

    2 service and configuration design dimensions

    网络编程是 综合权衡 复杂性、安全性、健壮性,而在时间和空间方面做取舍。
    复杂性:
    单个服务、无状态连接(http)
    状态持有 (smtp)
    线程池/( oracle 连接模式 )
    监听管理器( inetd 管理 ftp 和 telnet 连接 )
    安全性:
    1)多线程
    1、多线程可能造成的问题是:多个线程间共享相同的系统资源,为权限不同的两个用户的连接派发不同的线程,则由于两个线程共享相同的文件句柄,可能对系统安全造成威胁。
    2) 动态连接库
    2、动态连接库道理同上。各个进程映射到同一个库文件,如果有用户对库文件进行修改。则使得其它的用户也受到影响。典型的操作是“特洛伊木马”。( trojan horses )
    健壮性
    1)动态配置。24 * 7 的无间断运行。( Dynamic service reconfiguration )。需要一个额外的“配置管理器”来广播配置更新事件。
    2)负载平衡。

    时间:
    1)运行时时间:
    多线程:共享的数据页,有效避免了剧烈的内存换页。
    线程/进程池:减少了线程/进程创建和销毁消耗的时间。
    2)空间:
    线程池:使用了大量的进程空间。
    动态连接库:减少了内存使用。

    最简单的 网络服务器:

     

    几种高效的网络服务器模型:

    1、多服务( Multiservice Servers)服务器

    listen 多个 port,然后 select 监视多个 socket 句柄 。 select 到后,将事件发送到合适的进程。 inetd 是典型的例子。

    多服务模型把 tcp 握手的过程从业务逻辑中分离出来。有利于代码维护。

    2、多线程( thread pool )服务器

    通过 local IPC 将 socket handle 从监听进程传递到会话进程。 以实现一个进程处理多个 socket handle 。各个线程通过 ACE_TP_Reactor::handle_events() 来处理多线程模型下的 socket handle 上的事件。

    进程池、线程池(standing servers)通过 local IPC 来实现。apue 2th edition 17.4. Passing File Descriptors 介绍了怎样通过IPC机制在进程间传递句柄。


  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/diylab/p/1517153.html
Copyright © 2011-2022 走看看