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


  • 相关阅读:
    最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏
    SQL Server 存储字符数较大字段的问题
    c# var的含义与用法
    ListBox和ComboBox绑定数据简单例子
    “C# 未在本地计算机上注册microsoft.Jet.OLEDB.12.0”的解决方案
    [转] c# 操作Word
    C++ Regsvr32订购具体解释
    数字计算的有序排列的号码出现二分法
    合作信息处理模型
    内存四个领域,变量声明和定义,注册,c内联汇编,auto,堆,不变,静态变量
  • 原文地址:https://www.cnblogs.com/diylab/p/1517153.html
Copyright © 2011-2022 走看看