Câu hỏi hay, gần đây tôi đã tự hỏi mình như vậy. Để cung cấp cho bạn những con số xác định, các điểm chuẩn bên dưới (trong Scala, được biên dịch thành các mã byte gần như giống với mã Java tương đương):
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)
}
có sẵn ở đây , được thực hiện trên AMD 4x 2,8 GHz lõi kép và i7 lõi tứ với siêu phân luồng (2,67 GHz).
Đây là những con số:
i7
Thông số kỹ thuật: Intel i7 2x lõi tứ @ 2,67 GHz Kiểm tra: scala.threads.
Tên kiểm tra: loop_heap_read
Số chủ đề: 1 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 9.0069 9.0036 9.0017 9.0084 9.0074 (trung bình = 9.1034 phút = 8.9986 max = 21.0306)
Số chủ đề: 2 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 4,5563 4,7128 4,5663 4,5617 4,5724 (trung bình = 4,6337 phút = 4,5509 tối đa = 13,9476)
Số chủ đề: 4 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 2,3946 2,3979 2,3934 2,3937 2,3964 (trung bình = 2,5113 phút = 2,3884 tối đa = 13,5496)
Số chủ đề: 8 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 2.4479 2.4362 2.4323 2.4472 2.4383 (trung bình = 2,5562 phút = 2,4166 tối đa = 10,3726)
Tên kiểm tra: threadlocal
Số chủ đề: 1 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 91,1741 90,8978 90,6181 90,6200 90,6113 (trung bình = 91,0291 phút = 90,6000 tối đa = 129,7501)
Số chủ đề: 2 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 45.3838 45.3858 45.6676 45.3772 45.3839 (trung bình = 46.0555 phút = 45.3726 tối đa = 90.7108)
Số chủ đề: 4 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 22.8118 22.8135 59.1753 22.8229 22.8172 (trung bình = 23.9752 phút = 22.7951 tối đa = 59.1753)
Số chủ đề: 8 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 22.2965 22.2415 22.3438 22.3109 22.4460 (trung bình = 23.2676 phút = 22.2346 tối đa = 50.3583)
AMD
Thông số kỹ thuật: AMD 8220 4x lõi kép @ 2,8 GHz Kiểm tra: scala.threads.
Tên kiểm tra: loop_heap_read
Tổng số bài thi: 20000000 Số chủ đề: 1 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 12,625 12,631 12,634 12,632 12,628 (trung bình = 12,7333 phút = 12,619 tối đa = 26,698)
Tên bài kiểm tra: loop_heap_read Tổng công việc: 20000000
Thời gian chạy: (hiển thị 5 lần cuối) 6.412 6.424 6.408 6.397 6.43 (trung bình = 6.5367 phút = 6.393 tối đa = 19.716)
Số chủ đề: 4 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 3,385 4,298 9,7 6,535 3,385 (trung bình = 5,6079 phút = 3,354 tối đa = 21,603)
Số chủ đề: 8 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 5.389 5.795 10.818 3.823 3.824 (trung bình = 5.5810 phút = 2.405 tối đa = 19,755)
Tên kiểm tra: threadlocal
Số chủ đề: 1 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 200.217 207.335 200.241 207.342 200.23 (trung bình = 202,2424 phút = 200.184 tối đa = 245.369)
Số chủ đề: 2 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 100.208 100.199 100.211 103.781 100.215 (trung bình = 102.2238 phút = 100.192 tối đa = 129,505)
Số chủ đề: 4 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 62.101 67.629 62.087 52.021 55.766 (trung bình = 65.6361 phút = 50.282 tối đa = 167.433)
Số chủ đề: 8 Tổng số bài kiểm tra: 200
Thời gian chạy: (hiển thị 5 lần cuối) 40.672 74.301 34.434 41.549 28.119 (trung bình = 54.7701 phút = 28.119 tối đa = 94.424)
Tóm lược
Một luồng cục bộ có giá trị khoảng 10-20 lần so với đọc đống. Nó dường như cũng mở rộng quy mô tốt khi triển khai JVM này và các kiến trúc này với số lượng bộ xử lý.