ICE运行环境备忘三

原创 2012年03月28日 22:45:34
1、ICE是一个多线程的运行环境,每个communicator通信器中都有一个Leader-Follower的线程池负责处理客户端的服务请求,
   ICE的线程池有一系列的属性用以来控制线程池的运行,主要包含如下内容:
   ThreadPoolName.Size          = 3              # 线程池初始线程个数3个,注意默认大小1个
   ThreadPoolName.SizeMax       = 10             # 线程池最大线程个数10个,注意默认大小1个,大于等于初始大小
   ThreadPoolName.sizeWarn      = 8              # 线程池告警线程个数8个,默认取值为0不告警
   ThreadPoolName.StackSize     = 4MB            # 线程池中线程的堆栈大小4MB,默认使用系统配置大小
   ThreadPoolName.Serialize     = 1              # 线程池的线程消息序列化标记,默认取值0不序列化
   ThreadPoolName.ThreadIdleTime= 30             # 线程池中空闲线程回收时间,单位秒,默认取值60秒
   该处的ThreadPoolName可以替换成Ice.ThreadPool.Client、Ice.ThreadPool.Server、AdapterName.ThreadPool,分别用以
   控制客户端线程池、服务器端线程池、ObjectAdapter线程池的属性
   注意:如果没有显示的配置objectadapter的线程池属性,那么它继承使用归属的communicator的线程池属性
2、在强事物要求的处理系统中,可能需要客户端请求处理的时序性有严格保证,那么要达到该种效果,可以从两个方面解决:
   A、使用单线程的服务器运行环境,即Ice.ThreadPool.Server=1
   B、采用序列化的线程池属性,即Ice.ThreadPool.Server.Serialize = 1
   采用B方案看上去很优雅,但是他比单线程的线程池需要额外的系统负担来确保消息的序列化分发和处理。
   如果客户端请求能够保证不会再多线程中发送消息、不会使用多个连接发送消息、仅仅采用双向的同步调用,那么消息的发送
   和处理肯定是时序的,就不用上述方式来进行属性限制了
3、在ICE运行环境,提供了一个线程创建和通知的回调接口给应用,当ICE运行环境动态的创建和回收线程时,会回调对应的接口:
   class MyThreadHook : public virtual Ice::ThreadNotification
   {
   public:
       void start() {cout<<"Thread creat with id "<<ThreadControl().id()<<endl;}
  void stop() {cout<<"Thread destory with id "<<ThreadControl().id()<<endl;}
   };
   typedef IceUtil::Handle<MyThreadHook> MyTHreadHookPtr;
   
   int main()
   {
       Ice::InitializationData id;
  id.threadHook = new MyThreadHook;
  communicator = Ice::initialize(argc, argv, id);
   }
4、在ICE的运行环境中,所有的线程池默认采用LEADER-FOLLOWER的线程模型,按照默认的规则进行消息分发和处理,有的时候需要
   应用自行来控制特殊消息的分发,或者事物处理。ICE运行环境支持内嵌一个消息分发器,具体操作方式如下:
   class MyDispatcher : public virtaul Ice::Dispatcher
   {
   public:
       void dispatch(const DispatcherCallPtr& call, const Ice::ConnectionPtr& connection)
  {
       // 完成方法分派,但是不要试图在该方法中进行阻塞式的方法调用
// 可以再该处将消息分发给自己创建的指定线程
// 并在指定的线程中中调用call->run();
  }
   };
   typedef IceUtil::Handle<MyDispatcher> MyDispatcherPtr;
   
   int main()
   {
       Ice::InitializationData id;
  id.dispatcher = new MyDispatcher;
  communicator = Ice::initialize(argc, argv, id);
   }
   
   dispather 在如下有被调用:
   Ice::ConnectionI::message(ThreadPoolCurrent& current)
   Ice::ConnectionI::finished(ThreadPoolCurrent& current)
   IceInternal::DispatchWorkItem::execute(ThreadPoolCurrent& current)

ICE学习(七)-线程池

线程池 服务器线程池 每个服务器(communicator)都有2个线程池: Client thread pool:处理对客户端请求的回复,并回调(通知客户端异步回调对象AMI callback ob...
  • kaede999
  • kaede999
  • 2015年10月22日 13:59
  • 2189

ZeroC Ice IceBox使用

参考:D:\ZeroC\Ice-3.5.1-demos\demoj\IceBox     IceBox就像一个Tomcat,我们只要写N个Ice服务代码,用一个装配文件定义需要加载的服务列表、服务器...
  • Jerome_s
  • Jerome_s
  • 2016年03月16日 19:35
  • 3177

线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式

线程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA半同步/半异步模式。  HS/HA 半同步/ 半异步模式 :分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并...
  • yd137730268
  • yd137730268
  • 2016年07月28日 17:28
  • 513

ICE线程类多线程

http://blog.csdn.net/moxiaomomo/article/details/6732387 线程 1.Thread类     1.1概述        ...
  • bestone0213
  • bestone0213
  • 2015年03月19日 11:51
  • 434

ICE线程池模型

ICE线程池模型 — L/F领导者跟随者模式摘自:Leo 阿材网址:http://blog.csdn.net/ecjtuync/archive/2009/06/15/4270314.aspx程池模式一...
  • Colorado
  • Colorado
  • 2009年11月26日 09:33
  • 2650

MFC edit控件实现自动换行

必须设置Vertical Scrollbar = TRUE 必须设置MultiLine = TRUE 必须设置Horizontal Scrollbar = FALSE 必须设置Auto HScr...
  • a200638012
  • a200638012
  • 2016年07月08日 17:22
  • 4780

设置MFC Edit control可以换行显示

MFC Edit control可以换行显示 1.设置edit control 属性Multiline为true 2.写入数据时,想换行的时候写入"\r\n"即可,CString str.Re...
  • a780902723
  • a780902723
  • 2014年12月09日 16:52
  • 2463

MFC中EDIT控件实现换行

一、通过回车换行: 这里要有两个设置 .将控件的属性设置为Mutilines->true; .将控件的另一个属性设置为Want return->true. 水平和垂直滚动条设置...
  • dearwind153
  • dearwind153
  • 2015年12月09日 21:13
  • 3889

Ice 多线程模式

A thread pool is a collection of threads that the Ice run time draws upon toperform specific tasks. ...
  • bruce_wang_janet
  • bruce_wang_janet
  • 2011年07月10日 09:52
  • 1847

Ice读书笔记--C++线程与并发(一)

C++线程与并发 1. Ice线程模型      Ice服务器是多线程的。服务器端run time维护有一个线程池,用于处理到来的请求。通过领导者-跟随者线程模型,客户发来的每个操作调用都...
  • moxiaomomo
  • moxiaomomo
  • 2011年08月29日 20:59
  • 3509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ICE运行环境备忘三
举报原因:
原因补充:

(最多只允许输入30个字)