2011-05-24 18 views
6

numaralı Linux programlaması ile ilgili daha fazla bilgi için bkz. Debugging strange error that depends on the selected scheduler, İş parçacıklarımın zamanlaması ile ilgili bazı soruları araştırdım. Kök hakları ile çalışan ve C/C++ ile yazılmış bir zamanlama kritik uygulamasında paralel şeyler yapmak için pthreads kullanarak Linux 2.6.x üzerinde çalışıyorum.Pthreads ile ilgili başka bir problemin tartışılmasıyla,

Sorumu açıklamak için biraz kısa, aşağı haşlanmış, parçacıkları vermeye çalışacağım: Ana olarak

yere başında yapın:

struct sched_param sp; 
memset(&sp, 0, sizeof(sched_param)); 
sp.sched_priority = 99; 
sched_setscheduler(getpid(), SCHED_RR, &sp); 

ben kod olmasını anlıyoruz programımı, RR-Zamanlayıcısı'nı kullanacak şekilde değiştirir. önceliği. Bir pthread başlatırken

yapmam:

sched_param param; 
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); 
pthread_attr_getschedparam(&attr, &param); 
param.sched_priority = priority; 
pthread_attr_setschedpolicy(&attr, SCHED_RR); 
pthread_attr_setschedparam(&attr, &param); 

Ben 'öncelik' de verilen öncelik kullanarak, RR-Zamanlayıcı'ya başlatılacaktır oluyor iplik geçer kod olmak gerekirse, bu anlıyoruz. Eğer ana program programlayıcısını değiştirmiyorsa, bu eşit olarak çalışacak mı?

Anlamadığım şey, bu kodu ana telefondan aramak gerekirse? (Ana işlev, her şeyi başlatmaktan ve klavye girişini engellemekten başka bir şey yapmaz.) Bunun nasıl çalıştığına dair kesin belgeleri nerede bulabilirim? Adamların arka planı açıklamak için iyi bir iş yaptıklarını sanmıyorum.

Şimdiden teşekkürler.

+0

Başka bir soru ise, ayrı bir çok iş parçacıklı süreçler paralel çalışıyorsa ne olur? İşlemci süresi bunlar arasında nasıl dağıtılacak? – user761451

cevap

3

Linux, varsayılan olarak, bir iş parçacığını bir ışık-ağırlık işlemi olarak gören ntpl (Native POSIX Thread Library) uygulamasını kullanır; bu nedenle zamanlayıcı, iş parçacıkları diğer işlemlerle zamanlar. FreeBSD'de

, siz, ilkeyi zamanlama konuları belirlemenizi sağlar ama ipler sizin örnekte,

Yani varsayılan süreç (PTHREAD_SCOPE_SYSTEM parametre ayarlanmadığı sürece) olarak planlanmış değildir "orijinal" pthread uygulama var iş parçacığı, yüksek öncelikli standart bir işlem olarak planlanmıştır, bu nedenle tüm diğer işlemlerle aynı öncelik düzeyiyle, ana işleminizle rekabet halinde olacaktır.

Zaman açısından kritik işleriniz iş parçanızda bulunuyorsa, ana işleminize yüksek bir öncelik vermekten kaçının, gerçek zamanlı işlerinizle rekabette daha az işlem yapar.

PThreads ve NTPL here arasında bir karşılaştırma bulundu.

+0

Bu nedenle, ana-görev bir şey yapmazsa, ana-görevi bir Linux sistemi üzerinde RR-zamanlayıcıya çevirmek için söz edilebilir bir etkiye sahip değildir ve sadece iş parçacığını değiştirmek için kesinlikle yeterlidir? Birden çok iş parçacıklı program çalıştırma konusunda bile değil misiniz? – user761451

+0

NTPL uygulamasında, iş parçacığınız, sistemde başka herhangi bir işlem olarak kabul edilir, öncelik devralması yoktur;) –

+1

'getconf GNU_LIBPTHREAD_VERSION ', iş parçacığı uygulamasını anlatır. – user761451

0

NPTL uygulaması 1: 1 modeldir; kullanıcı alanında bir iş parçacığı ve LWP olarak adlandırılan çekirdek alanındaki bir işlem. Çekirdek tarafından planlanan bir LWP, PTHREAD_SCOPE_SYSTEM'in içerik kapsamına sahiptir.

İlgili konular