mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-26 18:42:41 +01:00
add thread affinity policy to threadpool
there are OS_DEFAULT, UNIFORM_DISTRIBUTION and CUSTOM With custom policy we can run thread on specified cpu
This commit is contained in:
@@ -32,7 +32,6 @@ namespace Poco {
|
||||
class Runnable;
|
||||
class PooledThread;
|
||||
|
||||
|
||||
class Foundation_API ThreadPool
|
||||
/// A thread pool always keeps a number of threads running, ready
|
||||
/// to accept work.
|
||||
@@ -49,28 +48,39 @@ class Foundation_API ThreadPool
|
||||
/// from the pool.
|
||||
{
|
||||
public:
|
||||
typedef enum _ThreadAffinityPolicy
|
||||
{
|
||||
OS_DEFAULT = 0,
|
||||
UNIFORM_DISTRIBUTION,
|
||||
CUSTOM
|
||||
} ThreadAffinityPolicy;
|
||||
|
||||
ThreadPool(int minCapacity = 2,
|
||||
int maxCapacity = 16,
|
||||
int idleTime = 60,
|
||||
int stackSize = POCO_THREAD_STACK_SIZE);
|
||||
int stackSize = POCO_THREAD_STACK_SIZE,
|
||||
ThreadAffinityPolicy affinityPolicy = OS_DEFAULT);
|
||||
/// Creates a thread pool with minCapacity threads.
|
||||
/// If required, up to maxCapacity threads are created
|
||||
/// a NoThreadAvailableException exception is thrown.
|
||||
/// If a thread is running idle for more than idleTime seconds,
|
||||
/// and more than minCapacity threads are running, the thread
|
||||
/// is killed. Threads are created with given stack size.
|
||||
/// Threads are created with given affinity Policy
|
||||
|
||||
ThreadPool(const std::string& name,
|
||||
int minCapacity = 2,
|
||||
int maxCapacity = 16,
|
||||
int idleTime = 60,
|
||||
int stackSize = POCO_THREAD_STACK_SIZE);
|
||||
int stackSize = POCO_THREAD_STACK_SIZE,
|
||||
ThreadAffinityPolicy affinityPolicy = OS_DEFAULT);
|
||||
/// Creates a thread pool with the given name and minCapacity threads.
|
||||
/// If required, up to maxCapacity threads are created
|
||||
/// a NoThreadAvailableException exception is thrown.
|
||||
/// If a thread is running idle for more than idleTime seconds,
|
||||
/// and more than minCapacity threads are running, the thread
|
||||
/// is killed. Threads are created with given stack size.
|
||||
/// Threads are created with given affinity Policy
|
||||
|
||||
~ThreadPool();
|
||||
/// Currently running threads will remain active
|
||||
@@ -99,24 +109,24 @@ public:
|
||||
int available() const;
|
||||
/// Returns the number available threads.
|
||||
|
||||
void start(Runnable& target);
|
||||
/// Obtains a thread and starts the target.
|
||||
void start(Runnable& target, int cpu = -1);
|
||||
/// Obtains a thread and starts the target on specified cpu.
|
||||
/// Throws a NoThreadAvailableException if no more
|
||||
/// threads are available.
|
||||
|
||||
void start(Runnable& target, const std::string& name);
|
||||
/// Obtains a thread and starts the target.
|
||||
void start(Runnable& target, const std::string& name, int cpu = -1);
|
||||
/// Obtains a thread and starts the target on specified cpu.
|
||||
/// Assigns the given name to the thread.
|
||||
/// Throws a NoThreadAvailableException if no more
|
||||
/// threads are available.
|
||||
|
||||
void startWithPriority(Thread::Priority priority, Runnable& target);
|
||||
/// Obtains a thread, adjusts the thread's priority, and starts the target.
|
||||
void startWithPriority(Thread::Priority priority, Runnable& target, int cpu = -1);
|
||||
/// Obtains a thread, adjusts the thread's priority, and starts the target on specified cpu.
|
||||
/// Throws a NoThreadAvailableException if no more
|
||||
/// threads are available.
|
||||
|
||||
void startWithPriority(Thread::Priority priority, Runnable& target, const std::string& name);
|
||||
/// Obtains a thread, adjusts the thread's priority, and starts the target.
|
||||
void startWithPriority(Thread::Priority priority, Runnable& target, const std::string& name, int cpu = -1);
|
||||
/// Obtains a thread, adjusts the thread's priority, and starts the target on specified cpu.
|
||||
/// Assigns the given name to the thread.
|
||||
/// Throws a NoThreadAvailableException if no more
|
||||
/// threads are available.
|
||||
@@ -168,7 +178,7 @@ protected:
|
||||
private:
|
||||
ThreadPool(const ThreadPool& pool);
|
||||
ThreadPool& operator = (const ThreadPool& pool);
|
||||
|
||||
int getCorrectCpu(int cpu);
|
||||
typedef std::vector<PooledThread*> ThreadVec;
|
||||
|
||||
std::string _name;
|
||||
@@ -180,6 +190,8 @@ private:
|
||||
int _stackSize;
|
||||
ThreadVec _threads;
|
||||
mutable FastMutex _mutex;
|
||||
ThreadAffinityPolicy _affinityPolicy;
|
||||
AtomicCounter _lastCpu;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user