スレッドプール:簡単に言うと、スレッドプールは、受信したビジネスを簡単かつ迅速に処理するために事前に作成されたスレッドのバッチです。タスクの従来の到着と比較して、即座に対処するスレッドを作成し、スレッドの作成とリサイクルのオーバーヘッド、より速い応答とより高い効率を節約します。
Linuxでは、posixスレッドライブラリが使われます最初に、よく使われる関数がいくつか紹介されています:
1スレッドの作成とキャンセルの関数
pthread_create
スレッドの作成
pthread_join
スレッドのマージ
pthread_cancel
スレッドのキャンセル
2スレッド同期関数
pthread_mutex_lock
pthread_mutex_unlock
pthread_cond_signal
pthread_cond_wait
この関数の詳細については、manページを参照してください。
スレッドプールの実装:
スレッドプールの実装は、主に3つの部分、スレッドの作成、スレッドプールへのタスクの追加、およびワーカースレッドによるタスクキューからのタスクの削除に分けられます。
実装する主なクラスはCTask、CThreadPoolの2つです。
/**
タスクの実行、タスクデータの設定、および実行を行うクラス
** /
Cコード
クラスCTask
{
protected:
string m_strTaskName; //タスク名
void * m_ptrData; //実行するタスクの特定のデータ
public:
CTask(){}
CTask(string taskName)
{
this-> m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run()= 0;
void SetData(void * data); //タスクデータの設定
};
タスククラスは仮想クラスです。実行インターフェイスを実装するには、すべてのタスクをCTaskクラスから継承する必要があります。実行インターフェースに実装する必要があるのは、特定の構文解析タスクのロジックです。 m_ptrDataは、単純データ型またはカスタム複合データ型のいずれかのタスクデータへのポインタです。
スレッドプールクラス
/**
スレッドプール
** /
Javaコード
クラスCThreadPool
{
private:
vector< CTask *> m_vecTaskList; //タスクリスト
int m_iThreadNum; //スレッドプールで開始スレッド
静的ベクトル< pthread_t> m_vecIdleThread; //現在アイドル状態のスレッドコレクション
静的ベクトル< pthread_t> m_vecBusyThread; //現在実行中のスレッドコレクション
静的Pthread_mutex_t m_pthreadMutex; //スレッド同期ロック
静的pthread_cond_t m_pthreadCond; //スレッド同期条件変数
protected:
静的void * ThreadFunc(void * threadData); //新しいスレッドのスレッド関数
static int MoveToIdle(pthread_t tid); //スレッドの実行終了後に自分自身をアイドルスレッドにする
static int MoveToBusy(pthread_t tid); //話中線に移動
int Create(); //すべてのスレッドを作成します。
public:
CThreadPool(int threadNum);
int AddTask(CTask *) Task); //スレッドプールにタスクを追加します。
int StopAll();
};
スレッドプールオブジェクトが作成されたら、スレッドのバッチを開始します。すべてのスレッドを空きリストに入れるタスクが到着すると、スレッドはそのタスクを受け取り、それを処理します。
スレッド間の同期は、スレッドロックと条件変数を使用します。
このクラスには2つの外部インタフェースがあります。
AddTask関数は、タスクをスレッドプールのタスクリストに追加し、それを処理するようにスレッドに通知します。タスクが到着したら、そのタスクをm_vecTaskListタスクリストに入れて、処理のためにpthread_cond_signalでスレッドを起動します。
StopAll関数はすべてのスレッドを停止します。
Cppコード
************************* ************************
コード:
×××××× ×××××××××××× CThread.h
#ifndef __CTHREAD
#define __CTHREAD < Br>
#include< vector>
#include< string>
#include< pthread.h>
using namespace std;
/**
タスクの実行、タスクデータの設定、および実行のためのクラス
** /
のクラスCTask
{
protected:
string m_strTaskName; //タスクの名前
void * m_ptrData; //実行するタスクの特定のデータ
public:
CTask(){}
CTask(文字列taskName)
{
this-> m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run()= 0;
void SetData(void * data); //タスクデータを設定します
};
/**
スレッドプール
** /
クラスCThreadPool
{
private:
vector< CTask *> m_vecTaskList; //タスクリスト
int m_iThreadNum; //スレッドプールで開始されたスレッド数
静的ベクトル< pthread_t> m_vecIdleThread; //現在のアイドルスレッドコレクション
静的ベクトル< pthread_t> m_vecBusyThread; //現在実行中のスレッドコレクション
静的pthread_mutex_t m_pthreadMutex; //スレッドの同期ロック
静的pthread_cond_t同期条件変数
protected:
static void * ThreadFunc(void * threadData); //新しいスレッド用のスレッドスレッド関数
static int MoveToIdle(pthread_t tid); //スレッドの実行が終了したら、自分自身をアイドル状態にする中
static int MoveToBusy(pthread_t tid); //使用中のスレッドに移動する
int Create(); //すべてのスレッドを作成する
public:
CThreadPool(int threadNum);
int AddTask(CTask * task); //タスクをスレッドプールに追加する
のインストールの詳細な説明今日初心者のためのXiaobian Linuxの友人はLinuxをインストールする方法を説明します、ここXiaobianはVirtual Boxを使用し、誰もがオープンソース
minicomは非常に使いやすいですが、時には十分に直感的ではない、それは新しいユーザー、特にウィンドウズハイパーターミナルユーザーにxgcomを使うことに慣れている人にお勧めです。 インストール方法
Linuxのハードディスクのパーティションフォーマットとマウント 1、ハードディスクのインターフェースの種類 ハードディスクのインターフェースは一般に2つの種類に分けられます。1つ
1、role:ディレクトリの内容を一覧表示します。 2、形式:ls [options] [files] ファイル関連の内容を表示しない場合は、 [options]を指定します。指定