自己初始化Timer Queue的尺寸

2021-04-20 03:37:16 字數 1077 閱讀 4100

如果你的應用有大量的定時器,你最好自己控制

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...