mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-27 19:10:20 +01:00
Merge pull request #743 from bas524/affinity
add thread affinity policy to threadpool
This commit is contained in:
@@ -246,7 +246,7 @@ TaskManagerTest::~TaskManagerTest()
|
||||
|
||||
void TaskManagerTest::testFinish()
|
||||
{
|
||||
TaskManager tm;
|
||||
TaskManager tm(ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
TaskObserver to;
|
||||
tm.addObserver(Observer<TaskObserver, TaskStartedNotification>(to, &TaskObserver::taskStarted));
|
||||
tm.addObserver(Observer<TaskObserver, TaskCancelledNotification>(to, &TaskObserver::taskCancelled));
|
||||
@@ -281,7 +281,7 @@ void TaskManagerTest::testFinish()
|
||||
|
||||
void TaskManagerTest::testCancel()
|
||||
{
|
||||
TaskManager tm;
|
||||
TaskManager tm(ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
TaskObserver to;
|
||||
tm.addObserver(Observer<TaskObserver, TaskStartedNotification>(to, &TaskObserver::taskStarted));
|
||||
tm.addObserver(Observer<TaskObserver, TaskCancelledNotification>(to, &TaskObserver::taskCancelled));
|
||||
@@ -315,7 +315,7 @@ void TaskManagerTest::testCancel()
|
||||
|
||||
void TaskManagerTest::testError()
|
||||
{
|
||||
TaskManager tm;
|
||||
TaskManager tm(ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
TaskObserver to;
|
||||
tm.addObserver(Observer<TaskObserver, TaskStartedNotification>(to, &TaskObserver::taskStarted));
|
||||
tm.addObserver(Observer<TaskObserver, TaskCancelledNotification>(to, &TaskObserver::taskCancelled));
|
||||
@@ -348,7 +348,7 @@ void TaskManagerTest::testError()
|
||||
|
||||
void TaskManagerTest::testCustom()
|
||||
{
|
||||
TaskManager tm;
|
||||
TaskManager tm(ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
|
||||
CustomTaskObserver<int> ti(0);
|
||||
tm.addObserver(
|
||||
@@ -431,7 +431,7 @@ void TaskManagerTest::testCustom()
|
||||
|
||||
void TaskManagerTest::testMultiTasks()
|
||||
{
|
||||
TaskManager tm;
|
||||
TaskManager tm(ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
tm.start(new SimpleTask);
|
||||
tm.start(new SimpleTask);
|
||||
tm.start(new SimpleTask);
|
||||
@@ -447,7 +447,7 @@ void TaskManagerTest::testMultiTasks()
|
||||
|
||||
void TaskManagerTest::testCustomThreadPool()
|
||||
{
|
||||
ThreadPool tp(2, 5, 120);
|
||||
ThreadPool tp(2, 5, 120, POCO_THREAD_STACK_SIZE, ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
TaskManager tm(tp);
|
||||
|
||||
// fill up the thread pool
|
||||
|
||||
@@ -35,9 +35,13 @@ ThreadPoolTest::~ThreadPoolTest()
|
||||
}
|
||||
|
||||
|
||||
void ThreadPoolTest::testThreadPool()
|
||||
void ThreadPoolTest::startThreadPoolTest(int affinityPolicy)
|
||||
{
|
||||
ThreadPool pool(2, 3, 3);
|
||||
int cpu = -1;
|
||||
if (affinityPolicy == static_cast<int>(ThreadPool::CUSTOM)) {
|
||||
cpu = 0;
|
||||
}
|
||||
ThreadPool pool(2, 3, 3, POCO_THREAD_STACK_SIZE, static_cast<ThreadPool::ThreadAffinityPolicy>(affinityPolicy));
|
||||
pool.setStackSize(1);
|
||||
|
||||
assert (pool.allocated() == 2);
|
||||
@@ -51,25 +55,25 @@ void ThreadPoolTest::testThreadPool()
|
||||
assert (pool.available() == 4);
|
||||
|
||||
RunnableAdapter<ThreadPoolTest> ra(*this, &ThreadPoolTest::count);
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 2);
|
||||
assert (pool.used() == 1);
|
||||
assert (pool.capacity() == 4);
|
||||
assert (pool.available() == 3);
|
||||
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 2);
|
||||
assert (pool.used() == 2);
|
||||
assert (pool.capacity() == 4);
|
||||
assert (pool.available() == 2);
|
||||
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 3);
|
||||
assert (pool.used() == 3);
|
||||
assert (pool.capacity() == 4);
|
||||
assert (pool.available() == 1);
|
||||
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 4);
|
||||
assert (pool.used() == 4);
|
||||
assert (pool.capacity() == 4);
|
||||
@@ -77,7 +81,7 @@ void ThreadPoolTest::testThreadPool()
|
||||
|
||||
try
|
||||
{
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
failmsg("thread pool exhausted - must throw exception");
|
||||
}
|
||||
catch (Poco::NoThreadAvailableException&)
|
||||
@@ -108,13 +112,13 @@ void ThreadPoolTest::testThreadPool()
|
||||
|
||||
_count = 0;
|
||||
_event.reset();
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 2);
|
||||
assert (pool.used() == 1);
|
||||
assert (pool.capacity() == 4);
|
||||
assert (pool.available() == 3);
|
||||
|
||||
pool.start(ra);
|
||||
pool.start(ra, cpu);
|
||||
assert (pool.allocated() == 2);
|
||||
assert (pool.used() == 2);
|
||||
assert (pool.capacity() == 4);
|
||||
@@ -127,9 +131,23 @@ void ThreadPoolTest::testThreadPool()
|
||||
assert (pool.allocated() == 2);
|
||||
assert (pool.used() == 0);
|
||||
assert (pool.capacity() == 4);
|
||||
assert (pool.available() == 4);
|
||||
assert (pool.available() == 4);
|
||||
}
|
||||
|
||||
void ThreadPoolTest::testThreadPool()
|
||||
{
|
||||
startThreadPoolTest(Poco::ThreadPool::OS_DEFAULT);
|
||||
}
|
||||
|
||||
void ThreadPoolTest::testThreadPoolUniformDistribution()
|
||||
{
|
||||
startThreadPoolTest(Poco::ThreadPool::UNIFORM_DISTRIBUTION);
|
||||
}
|
||||
|
||||
void ThreadPoolTest::testThreadPoolCustomDistribution()
|
||||
{
|
||||
startThreadPoolTest(Poco::ThreadPool::CUSTOM);
|
||||
}
|
||||
|
||||
void ThreadPoolTest::setUp()
|
||||
{
|
||||
@@ -160,6 +178,8 @@ CppUnit::Test* ThreadPoolTest::suite()
|
||||
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ThreadPoolTest");
|
||||
|
||||
CppUnit_addTest(pSuite, ThreadPoolTest, testThreadPool);
|
||||
CppUnit_addTest(pSuite, ThreadPoolTest, testThreadPoolUniformDistribution);
|
||||
CppUnit_addTest(pSuite, ThreadPoolTest, testThreadPoolCustomDistribution);
|
||||
|
||||
return pSuite;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,9 @@ public:
|
||||
~ThreadPoolTest();
|
||||
|
||||
void testThreadPool();
|
||||
|
||||
void testThreadPoolUniformDistribution();
|
||||
void testThreadPoolCustomDistribution();
|
||||
|
||||
void setUp();
|
||||
void tearDown();
|
||||
|
||||
@@ -39,6 +41,7 @@ protected:
|
||||
void count();
|
||||
|
||||
private:
|
||||
void startThreadPoolTest(int affinityPolicy);
|
||||
Poco::FastMutex _mutex;
|
||||
Poco::Event _event;
|
||||
int _count;
|
||||
|
||||
Reference in New Issue
Block a user