adında bir ve b adı verilen iki C++ kodum var. Boost threading kütüphanesini kullanarak 64 bit Linux'ta çalışıyorum.Farklı işlemler arasındaki verim
a kodu, bir işlem yapılmayan bitmeyen bir döngüde kalan 5 iş parçacığı oluşturur. b kodu, sonu olmayan bir döngüde() döndürme döngüsünde kalan 5 iş parçacığı oluşturur.
Dört çekirdekli bir makinede çalışıyorum ... kodunu yalnızca kodunu çağırdığında, CPU kullanımının neredeyse% 400'ünü alır. Tek başına b kodunu çağırdığınızda, CPU kullanımının neredeyse% 400'ünü alır. Bunu zaten bekledim.
But when running both together, I was expecting that the b code used almost nothing of CPU ve bir use the 400%. Ama aslında her ikisi de neredeyse% 200 CPU'nun eşit dilimini kullanıyor.
Sorum şu ki,() farklı işlem arasında çalışıyor mu? Beklediğim şekilde çalışmasını sağlamanın bir yolu var mı?
Cevabım yok ve sanırım sorgunuz ilginç geliyor, çünkü sched_yield işlemi sıranın arka tarafına koyduğunu iddia ediyor, ancak bu durumun gerçek kullanışlılığını sorgulamak açısından sizin için ilginç olabilir. sched_yield kullanarak: http://kerneltrap.org/Linux/Using_sched_yield_Improperly – Kevin
Bu kitap parçacığı, linux çekirdeğinizin sürümünün önemli olduğunu ima eder: http://books.google.com/books?id=k_ocKY0iegsC&pg=PA168&lpg=PA168&dq=sched_yield+ başka + işlemi ve kaynak = bl & oTS = VgCNK6kGIu & sig = gyduzTS_2EY8v8wwwAE8MScSLsg ve hl = tr & ei = 68N7TqfOCcXPiAK6qrDVBw & sa = X oi = book_result ve ct = neden & resnum = 3 ved = 0CCgQ6AEwAg # v = onepage ve q = sched_yield% 20to% 20another% 20process & f = yanlış ile + – Kevin