SpiecsEngine
 
Loading...
Searching...
No Matches

◆ TEST_F() [55/72]

SpicesTest::TEST_F ( ThreadPoolCached_test ,
SubmitVeryMuchPoolTask  )

Testing if submit very much pool task successfully.

Definition at line 201 of file ThreadPoolCached_test.h.

201 {
202
204
205 auto func = [](int sec) -> bool
206 {
207 std::this_thread::sleep_for(std::chrono::microseconds(sec));
208 return true;
209 };
210
211 std::vector<std::future<bool>> futures(10000);
212 for (int i = 0; i < 10000; i++)
213 {
214 futures[i] = m_ThreadPool.SubmitPoolTask(std::bind(func, 1));
215 }
216
217 func(2000); /* @brief Wait for part tasks finish. */
218
219 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,Spices::THREAD_MAX_THRESHHOLD);
220
221 /* @brief Wait for all tasks finish. */
222 for (int i = 0; i < 10000; i++)
223 {
224 futures[i].get();
225 }
226
227 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
228 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,Spices::THREAD_MAX_THRESHHOLD);
229 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
230 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
231 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,Spices::THREAD_MAX_THRESHHOLD);
232 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
233 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
234
235 /* @brief Wait for all threads recovery. */
236 auto inTime = std::chrono::high_resolution_clock::now();
237 while (m_ThreadPool.GetThreadsCount() != nThreads)
238 {
239 func(1000);
240 }
241 auto outTime = std::chrono::high_resolution_clock::now();
242
243 std::cout << "Cache Mode recovery threads cost: " << std::chrono::duration_cast<std::chrono::milliseconds>(outTime - inTime).count() << std::endl;
244
245 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
246 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
247 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
248 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
249 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
250 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
251 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
252 }
#define SPICESTEST_PROFILE_FUNCTION()
const uint32_t THREAD_MAX_THRESHHOLD