NodeJS ile çoklu çekirdek kullanımı
Merhaba arkadaşlar. 32 çekirdekli Xenon işlemcili bir sunucu üzerinde nodejs ile proje hazırladım ve tek dosya olarak sorunsuz çalışıyor. Dosyamı pm2 start dosyadi.js şeklinde çalıştırıyorum. Amacım aynı anda birden fazla dosyayı çalıştırabilmek. Konuyu tam olarak anlatmam gerekirse;
pm2 start dosyaadi-1.js
pm2 start dosyaadi-2.js
pm2 start dosyaadi-3.js
şeklinde birbirinin aynı fakat farklı portlara sahip dosyaları çalıştırıyorum.
dışarıdan bu dosyalara işlem gönderdiğim zaman birinde işlem tamamlanmadan, diğerine geçmiyor. Yani benim birim zamanda yaptığım işlem sayısı yine aynı kalıyor. İşlemci ve Ram kullanımları yüksek değil, yani tavan değerlere çıkmıyor. Yaptığım bir işlem ortalama 40sn sürdüğü için ben 40 sn'de 3 veya daha fazla işlem yapmak istiyorum. Bunu nasıl gerçekleştirebilirim? Yardımlarınız için şimdiden teşekkürler.
Merhaba @kargasa1982,
Node.js'in çoklu iş parçacıklı yapısı sayesinde, aynı anda birden fazla işlemi yapabilirsiniz. Ancak bu işlemlerin çalışması için iş parçacıklarının (thread) oluşturulması gerekir. Node.js'in çoklu iş parçacıklı yapısını kullanarak birden fazla işlemi aynı anda gerçekleştirebilmeniz için aşağıdaki adımları izleyebilirsiniz:
1- worker_threads modülünü kullanarak iş parçacıkları oluşturun. worker_threads modülü, Node.js'in iş parçacıklı çalışma modunu sağlar.
const { Worker, isMainThread } = require('worker_threads');
2- Bir iş parçacığı oluşturun ve iş parçacığının çalıştırılacağı kodu belirtin. Örneğin, aşağıdaki kod bloğu bir iş parçacığı oluşturur ve iş parçacığının çalıştırılacağı kodu belirtir:
if (isMainThread) {
const worker = new Worker('./my-worker.js');
}
3- İş parçacıklarının çalışmasını başlatın. Örneğin, aşağıdaki kod bloğu bir iş parçacığını çalıştırır:
if (isMainThread) {
const worker = new Worker('./my-worker.js');
worker.postMessage('start');
}
4- İş parçacıklarının çalışmasını durdurun. Örneğin, aşağıdaki kod bloğu bir iş parçacığını durdurur:
if (isMainThread) {
const worker = new Worker('./my-worker.js');
worker.postMessage('stop');
}
Bu adımları izleyerek, iş parçacıklarını kullanarak birden fazla işlemi aynı anda gerçekleştirebilirsiniz. Bu sayede işlemleriniz daha hızlı tamamlanır ve işlemci ve RAM kullanımınızı azaltabilirsiniz.
Ek olarak, worker_threads modülü hakkında daha fazla bilgi edinmek isterseniz aşağıdaki kaynaklara bakabilirsiniz:
- Node.js belgeleri: https://nodejs.org/api/worker_threads.html
- worker_threads modülü hakkında daha detaylı bilgi: https://nodejs.org/api/worker_threads.html#worker_threads_worker_threads
Ayrıca, iş parçacıklarını kullanarak birden fazla işlemi aynı anda gerçekleştirirken dikkat etmeniz gereken bazı noktalar da olabilir:
- İş parçacıklarının sayısını doğru ayarlamalısınız. Çok fazla iş parçacığı oluşturursanız, iş parçacıkları arasında veri paylaşımı gerekecek ve bu veri paylaşımı işlemleri yavaşlatabilir.
- İş parçacıkları arasında veri paylaşımı yaparken, veri paylaşımı işleminin yapıldığı anda diğer iş parçacıklarının çalışmasını durdurmayı düşünebilirsiniz. Bu sayede iş parçacıkları arasında veri paylaşımı işlemi tamamlandıktan sonra diğer iş parçacıkları tekrar çalışmaya başlar ve işlemler hızı arttırılır.
Umarım bu bilgiler yardımcı olmuştur.