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

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

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

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

    線程池處理部分

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

    線程池技術

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

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

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

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

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

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

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

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

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

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


    class   GThreadPoolModel
    {
    friend static   UINT WINAPI  PoolManagerProc(void* pThread);  //線程池管理線程
    friend    static   UINT WINAPI  WorkerProc (void* pThread);       //工作者線程
    enum SThreadStatus                                        //線程池狀態
    {
    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 ); //獲取線程池當前工作狀態
    private:
    void    Init();
    void    Release();
    protected:
    ………………………..
    private:
    };

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

    posted on 2005-02-13 11:52 藍色雪焰 閱讀(309) 評論(0)  編輯  收藏 所屬分類: 網絡游戲
     
    主站蜘蛛池模板: 无码国产精品一区二区免费式影视| 狠狠热精品免费观看| 玖玖在线免费视频| 亚洲中文字幕久久精品无码喷水| 日产久久强奸免费的看| 国产成人亚洲影院在线观看| 一个人晚上在线观看的免费视频| 久久亚洲中文字幕精品一区| 中文字幕在线免费视频| 亚洲av日韩av高潮潮喷无码| 永久黄色免费网站| 亚洲一线产品二线产品| 免费人成在线观看网站视频| rh男男车车的车车免费网站 | 国产国产人免费视频成69大陆| 爱爱帝国亚洲一区二区三区| 免费成人午夜视频| 日本免费A级毛一片| 亚洲视频在线一区二区三区| 无人影院手机版在线观看免费 | 免费看国产曰批40分钟| 青青草国产免费国产是公开| 亚洲中文字幕在线观看| 99精品国产成人a∨免费看| 久久亚洲精品国产精品婷婷| 亚洲av成人一区二区三区在线观看| 中国国语毛片免费观看视频| 亚洲制服丝袜在线播放| 四虎国产精品免费久久影院| 国内精品免费视频精选在线观看| 亚洲无圣光一区二区| 国产成人高清精品免费鸭子| 精品国产免费一区二区三区香蕉| 亚洲黄色激情视频| 久久久久亚洲精品男人的天堂| 美女内射毛片在线看免费人动物| 亚洲GV天堂无码男同在线观看| 亚洲av无码专区国产乱码在线观看 | 亚洲无码视频在线| 日本免费网站视频www区| 日韩大片免费观看视频播放|