पर हास्केल (जीएचसी) में थ्रेडडेले समस्या मैंने जीएचसी में थ्रेडडे फ़ंक्शन के साथ अजीब व्यवहार देखा। मेरी कुछ मशीनों पर कॉनक। निम्नलिखित प्रोग्राम:उबंटू
main = do print "start"
threadDelay (1000 * 1000)
print "done"
अपेक्षा के अनुसार 1 सेकंड लेता है। दूसरी ओर, इस कार्यक्रम:
{-# LANGUAGE BangPatterns #-}
import Control.Concurrent
main = do print "start"
loop 1000
print "done"
where loop :: Int -> IO()
loop !n =
if n == 0
then return()
else do threadDelay 1000
loop (n-1)
, मेरे मशीनों के दो पर चलने के लिए के बारे में 10 सेकंड लेता है की उम्मीद के रूप में यद्यपि अन्य मशीनों पर इसके बारे में 1 सेकंड लेता है,। (मैंने थ्रेडस्कोप से एक स्क्रीन शॉट को संकलित किया है। यहां दिखाया गया है कि प्रत्येक 10 मिलीसेकंड में केवल एक बार गतिविधि होती है:
दूसरी ओर, यहां से एक स्क्रीनशॉट है मेरी मशीनों में से एक से ThreadScope जिस पर कार्यक्रम लेता है 1 सेकंड कुल:
ऐसा ही एक सी कार्यक्रम:
#include <unistd.h>
#include <stdio.h>
int main() {
int i;
for (i=1; i < 1000; i++) {
printf("%i\n",i);
usleep(1000);
}
return 0;
}
है सही काम चल रहा है, यानी './a.out समय' की तरह उत्पादन देता है :
1
2
...
999
real 0m1.080s
user 0m0.000s
sys 0m0.020s
क्या किसी को इससे पहले इस समस्या का सामना करना पड़ा है, और यदि हां, तो यह कैसे तय किया जा सकता है? मैं अपनी सभी मशीनों पर लिनक्स (x86_64) के लिए ghc 7.2.1 चला रहा हूं और उबंटू के विभिन्न संस्करण चला रहा हूं। यह उबंटू 10.04.2 पर बुरी तरह काम करता है, लेकिन 11.04 पर ठीक है।
मैंने वास्तव में 'थ्रेड वाले' ध्वज के साथ संकलित किया था। – Andreas