如果你的應用有大量的定時器,你最好自己控制
timer_queue
的尺寸。原因如下。預設的
ace的
timer_queue
初始化的尺寸不大,一般只有
44個。而原有的尺寸不能滿足你的要求的時候,
timer_queue
會自動增長,以
timer_heap
為例,增長的方式是擴大一倍空間。在效能要求嚴格環境下,多次增長佇列的尺寸對效能會造成一定的衝擊。下面是空間調整函式
grow_heap
的部分**剖析。
template void
ace_timer_heap_t::grow_heap (void)
其實這和
std::vector
一樣,如果你知道要使用多少空間,先呼叫
reserve
預分配空間會大大加快後面的執行速度。如果你知道要使用多少個定時器,告知底層,它會幫你提前分配好空間,否則他會採用他認為合理的方式和尺寸。
所以最好的方法是你先估算你大致需要使用的
timer
數量,在初始化是告訴
timer_queue
。但是reactor
沒有辦法通過使用引數調整
time_queue
的大小,你必須自己進行替換
time_queue
來實現目的。方法大致如下:
ace_timer_queue
*timer_queue_=null;
//根據自己的需要調整
time_queue
的尺寸
timer_queue_ = new ace_timer_heap(maxaccept + maxconnect + 16);
ace_reactor::instance(new ace_reactor(new ace_select_reactor(null,timer_queue_,1),1),1);
這樣你就替換了
reactor
的timer_queue
,同時你要記住在程式執行退出前自己釋放的你申請的
timer_queue_;
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...