2011-11-21 7 views
20

Uygulamamda, birçok ağ bağlantılı görevi yerine getirerek ve bazen bir io bağlı görevi yürüterek ve daha küçük io ilişkili görevlere bölünerek bir sorunu çözmem gerekiyor. Bu görevler şu anda Java'nın standart threadpool mekanizması kullanılarak yürütülmektedir. Çatal-ve-katılım çerçevesine geçip geçemeyeceğimi merak ediyorum. Ama asıl soru, genellikle io bağlı operasyonları veya CPU'yu sınırlamak için kullanılan çerçeve için midir? Çoğunlukla CPU'nun bağlı olduğu işlemler için çatal-ve-birleştirme çerçevesinin multo çekirdek işlemcilerinden faydalanmak için iş çalma tekniğini kullanmasına neden olduğunu, ancak IO'yu bağımlı görevler için kullanırsam, herhangi bir olumsuz etki olacak mı?Java'nın fork-and-thread iş parçacığı havuzu IO bağlı görevini yürütmek için iyidir?

+0

Hangi kriterlere göre "İyi"? Ne tür bir I/O? Ağ? Disk? Konsol? GUI? Çatal-ve-birleştirme gerçekten 'iplik havuzu' mu? – EJP

+0

bir ağ bağlantılı io bağlı görevi. – Shamik

+0

içgörülü soru; upvoted – necromancer

cevap

23

Fork-join, işlemle ilgili görevler için tasarlanmıştır, dolayısıyla genel olarak hayır diyorum. Fork-join, FJ çerçevesini, bir süreliğine engellenecek ve yeni görevler oluşturmayacak şekilde FJ çerçevesini anlatmak için bir API'ye (ManagedBlocker api) sahip olmakla birlikte, keyfi bir şekilde değil, kısa beklemeler (bir kilit elde etmek gibi) için tasarlanmıştır. IO için bekler.

Çatal birleştirmeyi kullanan bir sistemimiz var ve IO'ya bağlı görevleri ayrı bir yürütme havuzuna aktarıyoruz. Veriler geldiğinde, görevleri bir araya getiren havuza yönlendirir, böylece yalnızca cpu-bağlı çalışma gerçekleşir.

2

Sorununuzun "I/O bağlı" yönünü ele almaya çalışıyorsanız, standart iş parçacıklarından fork-and-join 'e geçişin şeyleri geliştireceğinden şüpheleniyorum. Geçerli iplik tabanlı çözüm düzgün. (Ve Alex Miller'ın cevabına dayanarak, anahtar aslında işleri daha da kötüleştirebilirdi.)

Veya başka bir şekilde belirtmek gerekirse, G/Ç bağlı uygulamanızı daha hızlı hale getirmenin yolu, bunu yapan sorunları çözmektır./O bağlı ... veya sisteminizin G/Ç bant genişliğini artırın.

1

çatal-katılır için zorlayıcı bir avantaj bu durumda olmak görünmüyor.

çok sert bazı kaynak sürüş olmaz çünkü ya bir signficant dezavantaj olarak görünmüyor. Yapmanız başka önemli gelişme var kadar

sonuçta

i parçacığı havuzu ile kalmak istiyorum.

İlgili konular