अच्छा सवाल है, मैं हाल ही में खुद से पूछ रहा हूं। आपको निश्चित संख्या देने के लिए, नीचे दिए गए मानदंड (स्काला में, समान जावा कोड के समान वस्तुतः बायकोड्स के लिए संकलित):
var cnt: String = ""
val tlocal = new java.lang.ThreadLocal[String] {
override def initialValue = ""
}
def loop_heap_write = {
var i = 0
val until = totalwork / threadnum
while (i < until) {
if (cnt ne "") cnt = "!"
i += 1
}
cnt
}
def threadlocal = {
var i = 0
val until = totalwork / threadnum
while (i < until) {
if (tlocal.get eq null) i = until + i + 1
i += 1
}
if (i > until) println("thread local value was null " + i)
}
यहां उपलब्ध है , एक एएमडी 4x 2.8 गीगाहर्ट्ज डुअल-कोर और एक क्वाड-कोर आई 7 पर हाइपरथ्रेडिंग (2.67 गीगाहर्ट्ज) के साथ किया गया था।
ये नंबर हैं:
i7
चश्मा: इंटेल i7 2x क्वाड-कोर @ 2.67 गीगाहर्ट्ज़ टेस्ट: scala.threads.ParallelTests
परीक्षण का नाम: loop_heap_read
संख्या संख्या: 1 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 9.0069 9.0036 9.0017 9.0084 9.0074 (avg = 9.1034 मिनट = 8.9986 अधिकतम = 21.0306)
संख्या संख्या: 2 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 4.5563 4.7128 4.5663 4.5617 4.5724 (avg = 4.6337 मिनट = 4.5509 अधिकतम = 13.9476)
संख्या संख्या: 4 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 2.3946 2.3979 2.3934 2.3937 2.3964 (औसत = 2.5113 मिनट = 2.3884 अधिकतम = 13.5496)
संख्या संख्या: 8 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 2.4479 2.4362 2.4323 2.4472 2.4383 (औसत = 2.5562 मिनट = 2.4166 अधिकतम = 10.3726)
टेस्ट का नाम: थ्रेडलोकल
संख्या संख्या: 1 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 91.1741 90.8978 90.6181 90.6200 90.6113 (avg = 91.0291 मिनट = 90.6000 अधिकतम = 129.7501)
संख्या संख्या: 2 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 45.3838 45.3858 45.6676 45.3772 45.3839 (avg = 46.0555 मिनट = 45.3726 अधिकतम = 90.7108)
संख्या संख्या: 4 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखा रहा है) 22.8118 22.8135 59.1753 22.8229 22.8172 (avg = 23.9752 मिनट = 22.7951 अधिकतम = 59.1753)
संख्या संख्या: 8 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 22.2965 22.2415 22.3438 22.3109 22.4460 (avg = 23.2676 मिनट = 22.2346 अधिकतम = 50.3583)
एएमडी
चश्मा: AMD 8220 4x दोहरे कोर @ 2.8 गीगाहर्ट्ज़ टेस्ट: scala.threads.ParallelTests
परीक्षण का नाम: loop_heap_read
कुल काम: 20000000 थ्रेड संख्या: 1 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 12.625 12.631 12.634 12.632 12.628 (avg = 12.7333 मिनट = 12.619 अधिकतम = 26.698)
टेस्ट का नाम: loop_heap_read कुल काम: 20000000
रन समय: (अंतिम 5 दिखा रहा है) 6.412 6.424 6.408 6.397 6.43 (औसत = 6.5367 मिनट = 6.393 अधिकतम = 19.716)
संख्या संख्या: 4 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 3.385 4.298 9.7 6.535 3.385 (औसत = 5.6079 मिनट = 3.354 अधिकतम = 21.603)
संख्या संख्या: 8 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखा रहा है) 5.389 5.795 10.818 3.823 3.824 (avg = 5.5810 मिनट = 2.405 अधिकतम = 19.755)
टेस्ट का नाम: थ्रेडलोकल
संख्या संख्या: 1 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 200.217 207.335 200.241 207.342 200.23 (औसत = 202.2424 मिनट = 200.184 अधिकतम = 245.369)
संख्या संख्या: 2 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 100.208 100.199 100.211 103.781 100.215 (avg = 102.2238 मिनट = 100.192 अधिकतम = 129.505)
संख्या संख्या: 4 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 62.101 67.629 62.087 52.021 55.766 (avg = 65.6361 मिनट = 50.282 अधिकतम = 167.433)
संख्या संख्या: 8 कुल परीक्षण: 200
रन समय: (अंतिम 5 दिखाते हुए) 40.672 74.301 34.434 41.549 28.119 (avg = 54.7701 मिनट = 28.119 अधिकतम = 94.424)
सारांश
एक धागा स्थानीय 10-20x के आसपास होता है जो ढेर पढ़ा जाता है। यह इस JVM कार्यान्वयन और प्रोसेसर की संख्या के साथ इन आर्किटेक्चर पर भी अच्छा लगता है।