का उपयोग करना: C++ (MinGW)
, Qt4.7.4
, Vista (OS)
, intel core2vPro
QThreads CPU कोर नहीं ठीक से उपयोग उपयोग किया
मैं ठीक उसी तरह में 2 विशाल फ़ाइलों को संसाधित करने की जरूरत है। तो मैं प्रसंस्करण दिनचर्या को 2 अलग-अलग फाइलों के लिए 2 अलग-अलग धागे से कॉल करना चाहता हूं। जीयूआई धागा कुछ भी भारी नहीं करता है; बस एक लेबल प्रदर्शित करता है और थ्रेड टर्मिनेशन स्थितियों के उत्सर्जन की जांच करने के लिए एक ईवेंट लूप चलाता है और उसके अनुसार मुख्य आवेदन छोड़ देता है। मुझे उम्मीद है कि यह दो कोर (इंटेल कोर 2) को कुछ हद तक समान रूप से उपयोग करने की उम्मीद है, लेकिन इसके विपरीत मैं टास्क मैनेजर से देखता हूं कि कोर में से एक का अत्यधिक उपयोग किया जाता है और दूसरा नहीं है (हालांकि हर बार जब मैं कोड चलाता हूं); 2 फाइलों को संसाधित करने के लिए लिया गया समय भी एक फ़ाइल को संसाधित करने के लिए लिया गया समय से कहीं अधिक है (मैंने सोचा कि यह बराबर या थोड़ा अधिक होना चाहिए था, लेकिन यह गैर-थ्रेडेड में एक के बाद 2 फाइलों को प्रोसेस करने के बराबर है आवेदन)। क्या मैं धागे को किसी भी कोर का उपयोग करने के लिए मजबूर कर सकता हूं जो मैं निर्दिष्ट करता हूं?
QThread* ptrThread1=new QThread;
QThread* ptrThread2=new QThread;
ProcessTimeConsuming* ptrPTC1=new ProcessTimeConsuming();
ProcessTimeConsuming* ptrPTC2=new ProcessTimeConsuming();
ptrPTC1->moveToThread(ptrThread1);
ptrPTC2->moveToThread(ptrThread2);
//make connections to specify what to do when processing ends, threads terminate etc
//display some label to give an idea that the code is in execution
ptrThread1->start();
ptrThread2->start(); //i want this thread to be executed in the core other than the one used above
ptrQApplication->exec(); //GUI event loop for label display and signal-slot monitoring
अलग-अलग भौतिक हार्ड ड्राइव पर फ़ाइलें हैं? यदि आप दो फाइलों को एक बार में पढ़ने के लिए जंग को घुमाने की कोशिश कर रहे हैं तो आपको प्रत्येक बार एक अलग थ्रेड निर्धारित होने पर उनके बीच खोजना होगा, और वह हिस्सा सीपीयू से प्राप्त होने वाली किसी भी चीज़ को स्वैप करेगा। –
लगभग बराबर आकार की फाइलें हैं? – Tudor
@PeteKirkham: बस 1 एचडीडी – ustulation