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机制在进程间传递句柄。


  • 相关阅读:
    vmware Unable to open kernel device "\.Globalvmx86": The system cannot find the file 的解决方法
    nc和telnet配合使用
    linux下批量替换文件内容
    Linux动态库的导出控制
    goang Receiver & interface
    Go与C语言的互操作 cgo
    Go fsm
    Git多账号登陆
    mysql 安装与配置、使用
    Reverse Integer
  • 原文地址:https://www.cnblogs.com/diylab/p/1517153.html
Copyright © 2011-2022 走看看