मैं C++ एक ThreadPool विकसित करने के लिए कोशिश करते हैं और मुझे आश्चर्य है अगर यह बेहतर है कार्यकर्ता धागे के मुख्य पाश में उपज के लिए() धागे या एक शर्त चर पर प्रतीक्षा करने के लिए:ThreadPool कार्यान्वयन: condition_variables बनाम उपज()
void worker_thread(void)
{
// this is more or less pseudocode
while(!done)
{
if(task_available)
run_task();
else
std::this_thread::yield();
}
}
बनाम
void worker_thread(void)
{
// this is more or less pseudocode
std::unique_lock<std::mutex> lk(mutex_);
while(!done)
{
if(task_available)
run_task();
else
condition_.wait(lk);
}
}
कोई भी विचार
? क्या दोनों संस्करणों के बीच कोई प्रदर्शन अंतर होगा?
सशर्त दृष्टिकोण कैसे कार्यान्वित किया जाता है? क्या उनके पास एक समान प्रतीक्षा तंत्र है जो वर्कर_थ्रेड ऊपर है? – headmyshoulder
उपज कॉलिंग थ्रेड को अन्य प्रोसेसर पर चलाने के लिए तैयार होने वाले अन्य थ्रेड पर निष्पादन उत्पन्न करने का कारण बनता है (विंडोज़ के लिए स्विचटो थ्रेड देखें)। सशर्त के लिए –
, pthread_cond_wait देखें। इसलिए यह थ्रेड को नींद की स्थिति में प्रवेश करने का कारण बनता है जब तक कि सशर्त निकाल दिया जाता है (विंडोज़ पर एक घटना की तरह) –