<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    游戲策劃咨訊
    做一個游戲并不難,難的是做一個好游戲;完美在于積累!
     

    線程池處理部分

    續(xù)上在這里我將要向大家簡單介紹一下游戲服務器中必須要處理另外一項主要技術(shù):

    線程池技術(shù)

    開始 我來向大家簡單來介紹一下線程池的概念,先簡單了解下線程先,線程可以理解為一個function , 是一個為了進行某一項任務或者處理某一項具體事務的函數(shù)。例如:

    UINT  WINAPI  FunctionCtrl(void *)              //線程處理函數(shù)
    {
        進行某一項任務或者處理某一項具體事務
        ………….
        return  EXITFUNCTION_CODE;               //退出碼
    }

    而我們的線程池自身可以理解為是很多線程的一個管理者也可以說是一個很多線程的統(tǒng)籌者。因為我們的線程池具有生成線程功能也具有撤消線程的權(quán)利。這就是簡單的線程池的概念(我的理解,呵呵!!)接下來就來具體介紹線程池了!!

    首先 介紹我們?yōu)槭裁匆褂镁€程池技術(shù)呢?大家都知道我們的游戲服務器端要處理大量的用戶請求,,同時需要發(fā)送大量的游戲數(shù)據(jù)到客戶端,從而來驅(qū)動客戶端程序的執(zhí)行和維持游戲的進行。那我們的服務器端是如何進行處理的呢?其實在這里我們就充分用到了線程池技術(shù)。
    那么用這種技術(shù)有什么好處和優(yōu)點呢?以下就來簡述這些,有不足之處和不當之處希望有心人指正,呵呵!!

    大家都了解在我們服務器整個運行過程中,我們將整個運行時間分成很多個時間片。而對于這些已經(jīng)分成的各個微小的時間片而言,在各個不同時間片中要處理的用戶請求和需要發(fā)送到用戶端的游戲數(shù)據(jù)量也將是不一樣的。而處理用戶的請求和發(fā)送數(shù)據(jù)到客戶端的工作都是由一系列的線程來執(zhí)行的。

    鑒于上面,這樣我們就可以感性的設(shè)想下服務器運行中的兩種情況:
    第一種在我們服務器運行到某個時間片需要處理大量的用戶請求和發(fā)送大量數(shù)據(jù),有這樣繁重的工作任務,我們就需要有很多的工作者線程來處理完成這樣的任務,以此來滿足我們的工作需要。這樣說我們就必須擁有很多工作者線程。

    第二種在我們服務器運行到某個時間片需要處理的用戶請求和發(fā)送數(shù)據(jù)工作量比較小,由于任務比較少,我們用來處理任務的工作者線程也就不需要很多。也就是說我們只要有少量的工作者線程就可以達到我們的工作要求了。
        
    對于上面的兩種情況,我們可以說明這樣的一個事實,也就是說我們服務器在運行過程中運行狀態(tài)是動態(tài)改變的,呼忙呼閑,時急時慢的。服務器的這樣的行為動作和性質(zhì)可以做一個如下比喻:服務器就是一個企業(yè),在企業(yè)業(yè)務非常忙的時候,公司的員工數(shù)量就必須要增多來滿足業(yè)務的需要。而在企業(yè)不景氣的時候,接的業(yè)務也就比較少,那么來說就會有很多員工比較閑。那我們該怎么辦呢?為了不浪費公司資源和員工自身資源,我們就必須要裁減員工,從而來配合公司的運行。而做這樣工作的可能是公司的人力資源部或者其他部分。現(xiàn)在就認為是人力資源部了。呵呵。

    對于上面的比喻我們來抓幾個關(guān)鍵詞和列舉關(guān)鍵詞和我們主題對象進行對照,以此來幫大家來簡單理解服務器運行和線程池。

    企業(yè)        :  游戲服務器
    人力資源部  :  線程池
    職員        :  工作者線程

    在說了這么多的廢話后,就具體的將線程池模型  ThreadPool.h文件提供以供大家參考:


    class   GThreadPoolModel
    {
    friend static   UINT WINAPI  PoolManagerProc(void* pThread);  //線程池管理線程
    friend    static   UINT WINAPI  WorkerProc (void* pThread);       //工作者線程
    enum SThreadStatus                                        //線程池狀態(tài)
    {
    BUSY,
    NORMAL,
    IDLE
    };
    enum SReturnvalue  //線程返回值
    {
    MANAGERPROC_RETURN_value  = 10001,
    WORKERPROC_RETURN_value  = 10002,
    …………….
    };
    public:
    GThreadPoolModel ();
    virtual ~ GThreadPoolModel ();
        virtual bool  StartUp(WORD static_num,WORD max_num)=0;   //啟動線程馳
    virtual bool  Stop(void )=0;                                //停止線程池
    virtual bool  ProcessJob(void *)=0;                          //提出工作處理要求
    protected:
    virtual bool  AddNewThread(void )=0;                        //增加新線程
    virtual bool  DeleteIdleThread(void)=0;                       //刪除空閑線程
    static  UINT WINAPI PoolManagerProc (void* pThread);        //線程池管理線程
        static  UINT WINAPI WorkerProc (void* pThread);            //工作者線程
    GThreadPoolModel::SThreadStatus  GetThreadPoolStatus( void ); //獲取線程池當前工作狀態(tài)
    private:
    void    Init();
    void    Release();
    protected:
    ………………………..
    private:
    };

    以上是線程池模型的一個簡單class,而對于具體的工作處理線程池,可以由此模型進行繼承。以此來滿足具體的需要。到這里就簡單的向大家介紹了線程池的處理方式。有不對之處望指正。同時歡迎大家和我交流。

    posted on 2005-02-13 11:52 藍色雪焰 閱讀(310) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡游戲
     
    主站蜘蛛池模板: 久久免费精品视频| 久久久久女教师免费一区| 中文字幕天天躁日日躁狠狠躁免费| 国产成人精品日本亚洲专区| 国产亚洲人成在线影院| 在线观看永久免费视频网站| 亚洲国产日韩a在线播放| 亚洲国产午夜福利在线播放| 国产精品亚洲а∨无码播放麻豆| 日本黄页网站免费| 真正全免费视频a毛片| 亚洲精品国产精品乱码不卞| 精品国产福利尤物免费| 国产亚洲欧洲精品| 最近2019年免费中文字幕高清 | 曰曰鲁夜夜免费播放视频| 亚洲国产精品白丝在线观看| av无码久久久久不卡免费网站| 中文字幕在线观看亚洲视频| 成人午夜18免费看| 污污污视频在线免费观看| 亚洲精品国偷自产在线| 18禁成人网站免费观看| 亚洲kkk4444在线观看| 免费看小12萝裸体视频国产| 男女一边桶一边摸一边脱视频免费| 亚洲日韩小电影在线观看| 免费无遮挡无码永久视频| 2020亚洲男人天堂精品| 无码不卡亚洲成?人片| 三年片免费观看大全国语| 亚洲成人免费在线观看| 好看的亚洲黄色经典| 青青青免费国产在线视频小草| 国产成人精品久久亚洲高清不卡| 久久影视综合亚洲| 免费v片在线观看视频网站| mm1313亚洲国产精品无码试看| 久久久久久a亚洲欧洲aⅴ| 无限动漫网在线观看免费| 中文字幕在线免费播放|