Infinite loop'lar neden cpu kullanımı artırıyor

Başlatan yamak, 24 Ekim 2015, 12:22:26

yamak

Merhaba Arkadaşlar:
Windows üzerinden konuşacak olursak:
Windows bildiğim kadarıyla multilevel feedback queue scheduling algoritması ile proccess'leri yönetiyor.Yani kaba taslak her bir process priority'lerine göre belli bir zaman ayrılıyor eğer bir process cpu'yu çok fazla meşgul ediyosa onun priority'sini düşürüyor.Yani preemptive ile round robin'in karışımı gibi bişey.Bu durumda nasıl oluyo da inifinite loop içeren bi program cpu kullanımı aşırı derecede artırıyor.

Burak B

Adı üstünde infinite loop olduğu için. :) 5ms gecikme koy araya düzelir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

mufitsozen

Alıntı yapılan: Burak B - 24 Ekim 2015, 13:54:48
Adı üstünde infinite loop olduğu için. :) 5ms gecikme koy araya düzelir.

hocam delayde:

cnt=0;
while(count++<1000000);

diye olmuyormu?

su delay icin ornek kod varmi birisinde?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan

Yazilani okusak cevap verecegiz ama okumuyoruz.

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

muhittin_kaplan

Sana. Muhteremin sorusunu okuduysan eger anlamamissin ki cevap vermen gerekmez. 
Diyorki win de infinity loop lar aslinda state change olmasi gerekirken neden bukadar zaman aliyor ? Senin cevabin araya delay koy. Nereye koyacak delay i ? Mesala cevap vermeyen bir task in icerisi ne mi

Burak B

#6
Alıntı yapılan: yamak - 24 Ekim 2015, 12:22:26
... Bu durumda nasıl oluyo da inifinite loop içeren bi program cpu kullanımı aşırı derecede artırıyor.

Demiş bende -kafanı kullan- gecikme oluşturmazsan işlemciye nefes aldırmadığın için bu durum normaldir. İşlemci her fırsatta buraya girer buda taski hemen IDLE taskin yanına yerleştirir demişim. Dememişmiyim yoksa ? Ayrıca benim bu tavrım rahatsızlık veriyorsa bunu kendisi de belirtebilir kanımca. Amaç insanları düşünmeye zorlamak. Balığı pişirip önüne koymak değil. Gerçi bazıları "Kıroyum ama para bende" mantığıyla hazıra çok alışmış. Eh ona da yapacak bişi yok.

Ayrıca eklemeden edemeyeceğim o infinity loopların içine 1ms lik bir delay koyun bakalım ne oluyor.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

yamak

#7
Hocam sizce sorumdan "bu sorunun cozumu nedir" mi anlasiliyo?
Ben diyorum ki boyle bir scheduling algoritmasi kullanan sistemde boyle bisey nasil oluyo.
Ayrica bu konuyu hic arastirmamisim gibi mi duruyo? Bu soru sizce projede cikmaza girdim nasil cozcegimi bilmiyorum yardim edin sorusu mu? Baligi pisirim onune koymak demissiniz de. O zaman forumlari kullanmayalim

mesaj birleştirme:: 24 Ekim 2015, 17:25:40

Alıntı yapılan: Burak B - 24 Ekim 2015, 15:15:22

Ayrıca eklemeden edemeyeceğim o infinity loopların içine 1ms lik bir delay koyun bakalım ne oluyor.
Bu yazdiginizi daha yeni okudum.Dalga mi geciyosunuz anlamdim.Neyse bisey sormadim hocam. Bence sorumu okumadiniz. Sizin verdiginiz cevaplari ben sorumu sorarken soyledim zaten. Yani sorudaki seylerin aynisini soyleyerek dalga geciyosunuz

Burak B

#8
Alıntı Yap...gecikme oluşturmazsan işlemciye nefes aldırmadığın için bu durum normaldir. İşlemci her fırsatta buraya girer bu da taski hemen IDLE taskin yanına yerleştirir...

Mesele priority meselesi değil CPU zamanı kullanımı meselesi.  IDLE task neden en fazla cpu zamanını harcıyorsa.  Infinite loop ta CPU' nun  boşta kalan tüm zamanını harcayacaktır. Prioritysinin ne olduğu önemli değil. Öncelikli işlemler işlerini bitirir. Ancak CPU sürekli olarak infinite loopa girip çıktığı için bu task kill edilmezse kalan CPU zamanını çok hızlı tükettiğinden senin bahsettiğin durum oluşur. Bu nedenle windows altında bu tarz uygulamalar çakılır ve yanıt vermeyi bırakır. Akabinde bunlar kill edilir. Yani CPU nun tüm diğer işlerden bolca zamanı kaldığından IDLE yerine infinite loop ile uğraşır. Mesela aynı anda çalışan 100 uygulamamız olsa ve hepsi infinite loop olsa acaba CPU zamanı bunlara nasıl bölünür ?

Ayrıca herşeyi üstüne alınmana gerek yok kimseyle dalga geçtiğim de yok. Böyle şeyleri sevmem de zaten. Herkes derdini anlatmakta ve istediği soruyu sormakta özgür olduğu gibi  bilgiyi kendi yöntemleriyle vermekte de özgürdür. Benim yöntemlerim insanları düşünmeye teşvik etmekten geçiyor.

Balık konusuda "Bir kişiye bir balık vermektense nasıl balık tutacağını öğretmek daha hayırlıdır." lafından ötürü kullandığım bir tabirdi. Sen rahatsızlığını belirttin bende kendimi anlattım.

Soruna vermiş olduğum cevap seni tatmin etti veya etmedi ona birşey diyemem.

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

yamak

#9
Hocam sistem çağrısı olan sleep in ardından OS'un context switching yaptığının farkındayım.Ben bi an cpu kullanımının idle task haricinde geçen zaman üzerinden hesaplandığı ve idle task'ta iken cpu'nun low power moda alındığını düşünemedim.Cevabınız için teşekkür ederim.
Üzerime alındığım şey:
Sanki araştırmadan etmeden direkt burda sorduğumu düşünmeniz.Genelde forumda soru sormadan önce elimden geldiğince araştırıp daha sonra burda sorarım.Bir de bu soruyu şu bi projede tıkandığım için falan sormadım.Sadece merak ettim.
Tekrardan teşekkürler...

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

oyaz

Burak B hocanın delay den kastı Windows taki sleep() fonksiyonu bence. Bunu koyunca Windows programınızı çizelge dışına çıkarıp CPU yu biraz olsun rahatlatabilir.
Become a learning machine...

yamak

Alıntı yapılan: oyaz - 24 Ekim 2015, 23:14:36
Burak B hocanın delay den kastı Windows taki sleep() fonksiyonu bence. Bunu koyunca Windows programınızı çizelge dışına çıkarıp CPU yu biraz olsun rahatlatabilir.
Evet hocam yukarıda bahsetmiştim. sleep() çağrısı o anda çalışan process'in preempt edilmesini sağlıyor.Yani sleep ölü zamana sebebiyet vermiyor.