Bu tarz muhendislik kiyaslamalarinda cevap hep duruma gore degisir olacaktir.
- Eger yapilan is CPU bound ise multi-thread ile daha iyi performans alabilirsin. Ama bunun da exceptional durumlari var. Reactive programming yapiyorsundur, reactor threadini bloklamazsin, Aspect oriented programlama yapiyorsundur, cross-cutting yapmamak icin mevcut thread context'inden yurursun, CPU da calisacak instruction flow dependency yuksektir, multi thread ile performans almazsin ( ornegin 3. islem 2. islemin sonucuna, 2. islem de 1. islemin sonucuna baglidir ), multi-thread icin uygundur fakat thread sayisi secimini yanlis yapmissindir ve context-switch sebebiyle performans kaybedersin bu sebeple yapmazsin ya da her zaman daha iyi olmaz. Data ve flow uygundur, hardware yetersizdir, her thread paralel calisamaz ya da her islemci register'a yazilmayacak volatile data miktarini support edemiyor olabilir; yapmazsin.
en.wikipedia.org
en.wikipedia.org
- Ekipte concurrency bilen yoktur ki yuksek TPS application tecrubesi olmayan kisinin custom concurrency implemente etmemesi gerekir, multi-thread yapip bugli spagetti cikarmak istemezsin. 1 tane amatorun yazdigi kazma concurrency kodunu 40 tane usta fixleyemez. Oturup yeniden yazmak zorunda kalirsin.
- Yapilan is CPU bound degildir, her turlu I/O bekleyeceksindir; gerek kalmaz. Zincirin gucu en zayif halkanin gucune esittir.
- Kullandigin dil lightweight thread desteklemiyordur, 3 saniye kazanacagim diye 8GB ram kemirirsin hic gerek yoktur.
- Kullandigin teknolojiler concurrency test edecek, race condition expose edecek destek sunmuyordur bu riski almak istemezsin. Concurrency implementasyonundaki buglari reproduce etmesi de duzeltmesi de zordur. Kullanici "Bazen X oluyor" seklinde gelir.
- Os agnostic dillerde gelistirdigin multithread programlarin calisacagi isletim sistemindeki davranisina hakim olman gerekir. Bu da ciddi teknik bilgi ister. Ornegin Linux sistemde static thread priority tanimlaman beklenirken (
sched(7) - Linux manual page ) windows implementasyonu farklidir. Gelistirdigin algoritma dynamic weighted thread priority uzerinden yuruyecekse ve bunu OS agnostik dilde yazdiysan daha ilk koddan cicegi burnunda bug yazdin demektir. Her isletim sisteminin scheduling mekanizmasi farklidir ve senin bunu utilize edebilmen icin olayi bilmen gerekir.
Kabaca is paralelize etmeye uygun ve sen de paralelize etmeyi biliyorsan yapmalisin. Suphe varsa yapmamalisin, zaten cogu yazilim muhendisi de duzgun yapamaz bunu.