Döngü yerine Thread.

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen thelvaci »

Güzel kardeşim, öncelikle özür dilemeni gerektirecek herhangi bir hatan olduğunu düşünmüyorum en azından kendi adıma böyle söyleyebilirim. Hiçbirimiz annemizin karnında öğrenmedik bildiklerimizi, ayrıca bilmemek de ayıp değildir; asıl ayıp öğrenme gayreti içinde olmamaktır. Öğrenmenin birinci unsuru, merak ve azimdir. Sen de de bunların olduğuna inanıyorum. Dolayısı ile öğreneceğinden kuşkum yok, biz sadece yol gösteriyoruz sana ve senin nezdinde diğer arkadaşlarımıza bilgimiz dahilinde.

Ben herşeyi biliyorum dersem çok büyük bir yalan söylemiş olurum, asla öyle bir birikimim yok. Çok zeki olduğum da söylenemez. Ama inatçı, azimli, araştırmacı ve okumayı seven birisi olduğumu söyleyebilirim. Benim de hızlıca kavrayamadığım konular olmadı mı elbette oldu, hâla da var. Bu hususta da endişe duymana gerek yok, kendini suçlamana ise hiç lüzum yok. Bu tarz durumlarda, kendine, öğrenmeye çalıştığın konuya küsmemen, mücadeleyi bırakmaman, yavaş yavaş, sabır ile öğrenme sürecine devam etmen gerekiyor. Bilmediğimiz şeylerin çokluğu, kuyunun çok derin olması asla seni korkutmasın, çünkü beni hiç korkutmadı, hâla da korkutmuyor. Çok kısa bir zaman önce yaklaşık 110 tane kitap daha satın aldım, fırsat buldukça okumaya ve kendimi geliştirmeye devam ediyorum.

Öğrenme süreci asla bitmez, ölene kadar devam eder. Bu bilinç ile hareket edilir ise hiç bir zorluk aşılamayacak boyutta büyük olmaz. Bir yazılımcı karşılaştığı problemi ne çok küçümsemeli ne de çok büyütmelidir. Temelde nelerin olup bittiğini biliyor olmak pek çok şeyin kafada düzgün bir mantıkla ve berrak bir şekilde oluşmasına neden olur. İşte bu sebep ile işletim sistemlerinin çalışma mekanizmalarını bilmek son derece faydalıdır. Ben tüm mekanizmayı biliyormuyum, hayır.! Ama öğrendikçe bazı şeyler çok daha yerli yerine oturuyor. Bu sebeple kendi öğrenme istikametimi sana da tavsiye etmek istedim. Bu nedenle asla yılma, asla küsme, araştırmaya devam et, yere düşersen kalk, yeniden araştır, yeniden dene. Öğrenmenin yolu, okumak, araştırmak ve azimle denemekten geçer.

Bu hususlarda kitap tavsiye etmemi ister isen ve ingilizcen var ise bir kaç kitap tavsiye edebilirim.
RADCoder yazdı:
Sevgili kardeşim, muharrem bey'in sizin kalbinizi kırmak gibi bir gayreti olduğunu sanmıyorum. Sizi eleştirmek niyeti ile değil de öğrenmenize vesile olmak için çaba sarfettiğine inanıyorum. Threading denilen konu basit bir husus değil; öte yandan o kadar zor bir husus da değil. Sadece kurallarını bilmek, işletim sisteminin çalışma yapısına biraz hakim olmayı gerektiriyor. Ve inanın bana, bu hususlara vakıf olmanız, yazacağınız deneme projeleri ile değil, işletim sistemleri hakkındaki makale ve kitapları okuyarak daha hızlı gerçekleşir. Mühim olan bir thread oluşturup onun altında kod yazma yeteneğine haiz olmak değil, o thread'in ve benzer thread'lerin paylaşılan verilere erişimini düzgün bir şekilde yönetebilmektir.

Esas sorun, birden fazla thread'in ortak veri alanlarına erişip, onları kullanması sırasında gerçekleşir. İşte sırf bu sorunlardan ötürü, senkronizasyon mekanizmaları hayat bulmuştur. Sizden ricam benim makalelerim yada başkasının makaleleri, farketmez ama işletim sisteminin yapısı hakkında malumat elde etmeye çalışmanız yönünde olacaktır.

Bunu yaptığınız anda, gerek muharrem bey'in gerekse de benim gibi arkadaşlarınızın sizi eleştirme yolunda olmadığımızı, sadece kafanızdaki karışıklıkların aydınlanması için size yol göstermeye çalıştığımızı gözlemleyeceksiniz.

Esas soru, bir t zamanında, işletim sistemi üzerinde gerçekten de sadece 1 thread çalışıyor iken, biz nasıl oluyor da işletim sistemi içindeki tüm thread'leri paralel çalışıyor gibi görüyoruz. Bu ilüzyonun cevabını araştırmaya başladığınızda, thread scheduling kavramına girizgah yapmış olacaksınız. Ardından round robin ile tanışacaksınız, quanta zamanı ile karşılaşacaksınız. Sonra thread context'lerini anlamaya başlayacaksınız, instruction pointer'ın belirli bir yerden nasıl devam ettiğini kavramış olacaksınız.

Tüm bunları kavradığınızda, işini tam anlamı ile henüz tamamlayamamış bir thread kernel tarafından durdurulup, bir başka thread'e çalışması için şans tanınır ise, ortak veri bloklarına erişmeye çalışan ikinci thread'in okuyacağı datanın durumu hakkında sorular sormaya başlarsınız. Bu sorular, critical section, mutex, semaphore, interlocked fonksiyonları, waitable timer vb. senkronizasyon mekanizmalarını görmenize ve merakınızın bir kat daha artmasına neden olacak.

Öğrendikçe daha da acıkacaksınız, kendinize sınır vurmayın; gizli dünyaya bir adım atın ;)
Cevabınız için minnetdarım..
Anlamak zorluğu çeke biliyorum bazen, doğru bu benim beceriksizliyim ola bilir. Öğrenile bilirmi tabi uzun bir zaman alsa bile mutlaka isteniyorsa öğrenile bilir..Tuğrul Abi verdiyiniz sayfayı hala okumaktayım ama kodları kopyalayıp çalıştırmadım bile, çünki konuya hakim olamıyorum..
İlk önce olayı anlamak istemekteyim, ben kendimin çok iyi türkçe bildiyimi sanıyorudum ama oysaki yazdıklarınızı okuyup gerçekten açıkca söliyeceğim googlede sözleri aratıp anlamlarını buluyorum. Ne kadar doğru bilemem o yoldanda yüruyorum. Tabi bu okada önemli bir sorun teşkil etmemekte.

Muharrem Abim çok güzel bir şey vurgulamış:
Mantık oluşmayınca asıl konuya giriş olamadı.
Gerçek burada, mantığı kuramadım. Bazı konularda dediyim gibi beceriksiz ola bilirim..
Elbetdeki bu işlevi benim tarafımdan yapılmasını görmek istemektedir Muharrem abi, birşeyleri örete bilmesi acısından daha keyif alıcı olurdu..

Bir projeye başlamadan önce hepimiz araştırma yaparız, konuyla ilgili.
Bende araştırmalar yapıp hata denemeler yapmaya başladığımda bilginin çok geç işlendiyini gördüm.
Tabi bu işlem Windows ortamında çok güzel çalışırken Mobil tarafta malesef çok can sıkıcı bir bekletme yaşatmaktadır.

Ama hazır kod olayını gerçekten ihtiyaç duysam böle birşeye tenezzül etmem.
Drek Kod isterim.. Forumlardada olmasa kişisel olarak..

İşte:
bir ihtiyaca binaen herhangi bir referanstan bir thread her şeyi çözer lafı akla girince, süreç o ihtiyaç özelinde yürüyor
Doğrudur Thread olayı çözer kelimesi olaya atlamaya yeterli olmaktadır, ki asla Thread kullanmadım..

Sadece arka arka basdırıpta her soruya cevaplar yazmamın nedeni cevap vermek için çok kısa bir sürem olduğu içindir.
Kimseyi ve en önemliside kendimi madur duruma sokmamak için işi Java yazılımcısına devr etmem bence en doğrusu oldu..
O yüzden çok sık aralıklarla konuyu takip edipde olayı anlamaya çalışıyorum.
Son gelen ekte aynı kod yazınca Muharrem abim ister istemez kızdı.. :oops: Sizlere hak veriyorum ama benim sizler gibi düşemediyim ortadadır.
Ama Tuğrul abinin yazdıklarını okuyunca gerçekten basit olmadığını anladım. Bu günü kurtarmakla olmadığını bende çok iyi biliyorum. Onun içinde bir süre bilgisayardan uzak durup sonra temiz kafayla yazdıklarınızı okumaya ve örnekler yapmaya devam edeceğim..



Herşey için teşekkür ederim, hatalarım içinde çok çok özür dilerim..
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: Döngü yerine Thread.

Mesaj gönderen RADCoder »

Merhabalar Tuğrul abi. Dikkatiniz ve ilginizden dolayı çok teşekkür ederim.
Yazdıklarınızı okudum sizlere hak verdim. Ama benim sizinde sölediyiniz üzere yılmak niyetim yoktur..
Sadece bir süre ara verip yalnış bilgilerle dolmuş hafızayı boşaltmak istemekteyim.
Aslında geç anlamamın nedeni beynimle alakalı bir hastalığı zamanında geçirmemdir.
O yıllardan sonra malesef böyle oldu. Hastalık geçti ama bana bir hediye bıraktı devamlı düşünemiyorum.
thelvaci yazdı:Güzel kardeşim, öncelikle özür dilemeni gerektirecek herhangi bir hatan olduğunu düşünmüyorum en azından kendi adıma böyle söyleyebilirim. Hiçbirimiz annemizin karnında öğrenmedik bildiklerimizi, ayrıca bilmemek de ayıp değildir; asıl ayıp öğrenme gayreti içinde olmamaktır. Öğrenmenin birinci unsuru, merak ve azimdir. Sen de de bunların olduğuna inanıyorum. Dolayısı ile öğreneceğinden kuşkum yok, biz sadece yol gösteriyoruz sana ve senin nezdinde diğer arkadaşlarımıza bilgimiz dahilinde.
Ben herşeyi biliyorum dersem çok büyük bir yalan söylemiş olurum, asla öyle bir birikimim yok. Çok zeki olduğum da söylenemez. Ama inatçı, azimli, araştırmacı ve okumayı seven birisi olduğumu söyleyebilirim. Benim de hızlıca kavrayamadığım konular olmadı mı elbette oldu, hâla da var. Bu hususta da endişe duymana gerek yok, kendini suçlamana ise hiç lüzum yok. Bu tarz durumlarda, kendine, öğrenmeye çalıştığın konuya küsmemen, mücadeleyi bırakmaman, yavaş yavaş, sabır ile öğrenme sürecine devam etmen gerekiyor. Bilmediğimiz şeylerin çokluğu, kuyunun çok derin olması asla seni korkutmasın, çünkü beni hiç korkutmadı, hâla da korkutmuyor. Çok kısa bir zaman önce yaklaşık 110 tane kitap daha satın aldım, fırsat buldukça okumaya ve kendimi geliştirmeye devam ediyorum.

Öğrenme süreci asla bitmez, ölene kadar devam eder. Bu bilinç ile hareket edilir ise hiç bir zorluk aşılamayacak boyutta büyük olmaz. Bir yazılımcı karşılaştığı problemi ne çok küçümsemeli ne de çok büyütmelidir. Temelde nelerin olup bittiğini biliyor olmak pek çok şeyin kafada düzgün bir mantıkla ve berrak bir şekilde oluşmasına neden olur. İşte bu sebep ile işletim sistemlerinin çalışma mekanizmalarını bilmek son derece faydalıdır. Ben tüm mekanizmayı biliyormuyum, hayır.! Ama öğrendikçe bazı şeyler çok daha yerli yerine oturuyor. Bu sebeple kendi öğrenme istikametimi sana da tavsiye etmek istedim. Bu nedenle asla yılma, asla küsme, araştırmaya devam et, yere düşersen kalk, yeniden araştır, yeniden dene. Öğrenmenin yolu, okumak, araştırmak ve azimle denemekten geçer.

Bu hususlarda kitap tavsiye etmemi ister isen ve ingilizcen var ise bir kaç kitap tavsiye edebilirim
Ama okumak konusunda kaynak olayına yeniden dönersem, ki bizde olağan üstü değilde örta seviye kitapları bile yok malesef.
Ama öyle kitapları sadece Rusça bula biliriz. Rusçam var ama zayıftır terminoloji sözlerini anlıyamıyorum malesef..
Türkçe kitap kaynağının olup olmadığını bilmiyorum, ama varsa tavsiyenize minnetdar kalırım.
Elde ede bilmek adına internetden yada Türkiyede bulunan arkadaşlara aldıra bilirim..

Tekrar teşekkürler..
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen thelvaci »

Maalesef Türkçe kaynaklarda belirtilen detayları içeren, profesyonel bir kitap bilmiyorum henüz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen thelvaci »

Belki bir faydası olur diye sıklıkla okuduğum kitapların listesini aşağıda paylaşıyorum.

Concurrent Programming on Windows
http://www.amazon.com/gp/product/032143 ... PDKIKX0DER

Windows via C/C++ (5th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073566 ... PDKIKX0DER

Windows Internals, Part 1 (6th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073564 ... PDKIKX0DER

Windows Internals, Part 2 (6th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073566 ... PDKIKX0DER

Windows System Programming (4th Edition) (Addison-Wesley Microsoft Technology Series)
http://www.amazon.com/gp/product/032165 ... PDKIKX0DER

Operating System Concepts
http://www.amazon.com/Operating-System- ... ng+systems

Modern Operating Systems (4th Edition)
http://www.amazon.com/Modern-Operating- ... ng+systems
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen esistem »

Tuğrul bey merhaba, ufak bir sorum olacaktı.
Bilginiz varmı bilemiyorum ama, abf component paketinde TabfThreadComponent adında free bir component vardı, bir ara çok kullanmıştım. Sizce thread 'i kendimizin yazmasımı daha iyidir yoksa bu komponenti mi kullanmak mantıklıdır? Malum yazması biraz sıkıntı, hazır comp. kullanmak daha basit geliyor.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen thelvaci »

Maksat öğrenmek ve daha fazla esneklik ise kendiniz yazmalısınız, ama ben zaten herşeyi yalayıp yuttum, fazla zamanım yok ve kullanacağım component'de yeterince esnek diyorsanız component'de kullanabilirsiniz neden olmasın. Bu tamamen size bağlı bir şey. Hatta, OmniThreadLibrary'de kullanabilirsiniz, tavsiye ederim.
esistem yazdı:Tuğrul bey merhaba, ufak bir sorum olacaktı.
Bilginiz varmı bilemiyorum ama, abf component paketinde TabfThreadComponent adında free bir component vardı, bir ara çok kullanmıştım. Sizce thread 'i kendimizin yazmasımı daha iyidir yoksa bu komponenti mi kullanmak mantıklıdır? Malum yazması biraz sıkıntı, hazır comp. kullanmak daha basit geliyor.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen esistem »

Teşekkür ederim tuğrul bey, vaktim oldukça uğraşırım fakat bu ara herşey birbirine giriyor, şimdilik işin kolayına kaçmak daha uygun gibi.
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: Döngü yerine Thread.

Mesaj gönderen RADCoder »

Merhabalar, Tuğrul abi bilgilendirmeniz adına ve tavsiye verdiyiniz kitap linkleri için teşekkür ederim.
thelvaci yazdı:Belki bir faydası olur diye sıklıkla okuduğum kitapların listesini aşağıda paylaşıyorum.

Concurrent Programming on Windows
http://www.amazon.com/gp/product/032143 ... PDKIKX0DER

Windows via C/C++ (5th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073566 ... PDKIKX0DER

Windows Internals, Part 1 (6th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073564 ... PDKIKX0DER

Windows Internals, Part 2 (6th Edition) (Developer Reference)
http://www.amazon.com/gp/product/073566 ... PDKIKX0DER

Windows System Programming (4th Edition) (Addison-Wesley Microsoft Technology Series)
http://www.amazon.com/gp/product/032165 ... PDKIKX0DER

Operating System Concepts
http://www.amazon.com/Operating-System- ... ng+systems

Modern Operating Systems (4th Edition)
http://www.amazon.com/Modern-Operating- ... ng+systems
Konu başlığı altında, ingilizceye hakim kişilerin bu kitaplardan satın alıp yararlanmak adına çok faydalı bir kaynak olacağını düşünüyorum..

Araştırmalar yapmaya başladım ve bazı örnekler yapıp anlamaya çalışıyorum. Bu gün bir örnek yapmaya çalıştım ama her işlem içinden soru çıktıkça fikrinizi almak istedim.
Şu an için tek sorum şudur:

Bir threadımız var ve excute olayında for döngüsü çalıştırıyoruz.
İşlem Bitene kadar Çalıştırılan dögüyü Thread bize hızlı ve aynı anda hepsini bir anda getiriyor.(Yapmaya çalıştığım örnekte çıkan sonuç böle oldu)
Şimdi her işlem bitişini nasıl öğrene biliriz? Yani Thread bitmeden yaptığı her bir işlemi tek tek nasıl görürüz.
Şöyleki konu esasında verdiyim örenk üzerinden yola çıkarak aynı örnekle anlatmaya çalışırsam:

Kod: Tümünü seç

var
i:integer;
begin
for i:=1 to 5 do begin
Showmessage(InttoStr(i));
end;
Yazmış olduğum kodu bir Button tıklamasında yazarsak 1 den 5-e kadar bize mesaj ekranı gösterir.
Ama Mesaj ekranında OK Buttonuna tıklamasak döngü devam etmez. Yani her işlem sonunda bir mesaj kutusu gösterir.
(Sadece mesaj kutusu için geçerlidir)

Ben bu işlemi Thread olarak yaptığımda bana bir anda 5 tane Mesaj kutusu çıkarıyor..
İşte bu aralıkları nasıl yakalamlıyım yada birşeyleri yalnışmı yapıyorum?

Tekrar Teşekkürler..
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Döngü yerine Thread.

Mesaj gönderen thelvaci »

Evet kesinlikle bir şeyleri yanlış yapıyorsun. Thread içinden VCL görsel nesnelerine erişerek mesela. Anlıyorum, hızlıca bir şeyler görmek, anlamak arzusundasın ama; okumadan yanlış ilerlemiş olursun. Öncelikle benim sitemdeki thread makalelerinin hepsini sırası ile okumanı tavsiye ediyorum. Lütfen ondan sonra, kodlamaya geç.
Cevapla