Tôi có hai mã C++ được gọi là a và một được gọi là b. Tôi đang chạy trong một 64 bit Linux, bằng cách sử dụng thư viện Boost threading.sản lượng giữa các quy trình khác nhau
Mã mã tạo 5 luồng nằm trong vòng lặp không kết thúc thực hiện một số thao tác. Mã b tạo 5 chuỗi nằm trong vòng lặp không kết thúc gọi hàm yield().
Tôi đang sử dụng máy lõi tứ ... Khi chỉ gọi một mã, nó nhận được gần 400% mức sử dụng CPU. Khi chỉ gọi số b, nó nhận được gần 400% mức sử dụng CPU. Tôi đã mong đợi nó.
Nhưng khi chạy cùng nhau, tôi đã mong rằng mã b được sử dụng hầu như không có gì của CPU và a sử dụng 400%. Nhưng trên thực tế cả hai đều sử dụng bằng phần của CPU, gần 200%.
Câu hỏi của tôi là, không năng suất() hoạt động giữa quá trình khác nhau? Có cách nào để làm cho nó hoạt động theo cách tôi mong đợi không?
Tôi không có câu trả lời và tôi cho rằng câu hỏi của bạn thú vị vì yêu cầu sched_yield đặt quá trình ở mặt sau của hàng đợi chạy, nhưng điều này có thể thú vị đối với bạn về cách gọi tính hữu ích thực tế của sử dụng sched_yield: http://kerneltrap.org/Linux/Using_sched_yield_Improperly – Kevin
Đoạn mã này ngụ ý rằng phiên bản hạt nhân Linux của bạn quan trọng: http://books.google.com.vn/books?id=k_ocKY0iegsC&pg=PA168&lpg=PA168&dq=sched_yield+ đến + một quá trình + & nguồn = bl & ots = VgCNK6kGIu & sig = gyduzTS_2EY8v8wwwAE8MScSLsg & hl = vi & ei = 68N7TqfOCcXPiAK6qrDVBw & sa = X & oi = book_result & ct = kết quả & resnum = 3 & ved = 0CCgQ6AEwAg # v = onepage & q = sched_yield% 20to% 20another% 20process & f = false – Kevin