السلام عليكم
في اعتقادكم ما هي أفضل طريقة لقراءة الملفات النصية
(الملفات التي تفصلها \n)
باستخدام الخيوط؟
عن نفسي أفضل حل وجدته كان
هو أسلوب producer consumer
هل هناك طرق أسرع؟
تحياتي
السلام عليكم
في اعتقادكم ما هي أفضل طريقة لقراءة الملفات النصية
(الملفات التي تفصلها \n)
باستخدام الخيوط؟
عن نفسي أفضل حل وجدته كان
هو أسلوب producer consumer
هل هناك طرق أسرع؟
تحياتي
و عليكم السلام أخى علاء ....
لماذا طريقة خاصه؟
ألا تكفى ال Buffered Streams التى تقدمها الجافا؟
و ماذا تقصد ب طريقة Producer-Consumer ؟ هل تقصد أكتب ثم توقف و دع الخيط الأخر يقرأ حتى ينتهى من القراءه ثم يتوقف ثم أكتب و هكذا؟
و إن كنت تقصد هذا ... كيف تؤثر هذه الطريقة في السرعه؟
بالمناسبة هل جربت NIO؟
لا المشكلة لدي هي أريد البحث في ملفات ما
لو قرأت باستخدام Buffer فهذا يعني أني لا أستطيع أن أبحث في نفس الملف بأكثر من خيط
لهذا فأنا أفكر في خيط واحد ينتج ويضع الناتج في مستودع
وخيوط تقوم بالاستهلاك أو في حالتنا بالبحث
لم أستخدم NIO من قبل
هل من أفكار في الموضوع؟
تحياتي
حيا الله الشباب ,,
نعم Single Producer & Multi-Consumer تصميم جيد وسيكون هناك Utilization للموراد بشكل أفضل,, أيضاً من ناحية مقروئية الكود ووضوحه خصوصاً أنه سيفصل مسألة الإنتاج من مسألة الاستهلاك،، باستخدم java.util.concurreny سوف يكون الأمر أسهل وقابل للإدارة بعكس الLow Level Thread,,
هذه الأيام أقوم بنفس الوظيفة حيث أقوم بعمل Traversal على القرص لغرض الIndexing (لغرض البحث في الحقيقة حيث سيسهل الأندكس عملية البحث وسوف يكون سريع جداً )،، يمكنك وضع هذا الخيار اذا كانت عمليات البحث سوف تتم بصورة كثيرة ، فلا يمكن الانتظار مثلاُ 10 دقايق في كل عملية بحث,,
الProducer سوف يكتب ما يجده مباشره في Blocking Queue والConsumers سوف تقرأ منه ، تبقى المسئلة هي في تحديد هل الQueue ذو حد معين أم Unbounded Queue ,, أيضاً عدد الخانات فيه ،، وعدد الConsumers في الPool سوف يؤثر في أداء العملية,,
بالنسبة للقرائه الملفات فقد يكون هناك فرق طفيف بين كل طريقة وأخرى Buffered/NIO/Stream وان كان بعد تصميم الDesign يمكن أن تتضح أماكن التحسين اذا وجدت الحاجة,,
بالتوفيق،،
http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة
https://moalfat.com للكتب الالكترونية والكورسات التعليمية
Everything we see now is just an engineering solution based on old science
Wajdy Essam كتب:حيا الله الشباب ,,
نعم Single Producer & Multi-Consumer تصميم جيد وسيكون هناك Utilization للموراد بشكل أفضل,, أيضاً من ناحية مقروئية الكود ووضوحه خصوصاً أنه سيفصل مسألة الإنتاج من مسألة الاستهلاك،، باستخدم java.util.concurreny سوف يكون الأمر أسهل وقابل للإدارة بعكس الLow Level Thread,,
هذه الأيام أقوم بنفس الوظيفة حيث أقوم بعمل Traversal على القرص لغرض الIndexing (لغرض البحث في الحقيقة حيث سيسهل الأندكس عملية البحث وسوف يكون سريع جداً )،، يمكنك وضع هذا الخيار اذا كانت عمليات البحث سوف تتم بصورة كثيرة ، فلا يمكن الانتظار مثلاُ 10 دقايق في كل عملية بحث,,
الProducer سوف يكتب ما يجده مباشره في Blocking Queue والConsumers سوف تقرأ منه ، تبقى المسئلة هي في تحديد هل الQueue ذو حد معين أم Unbounded Queue ,, أيضاً عدد الخانات فيه ،، وعدد الConsumers في الPool سوف يؤثر في أداء العملية,,
بالنسبة للقرائه الملفات فقد يكون هناك فرق طفيف بين كل طريقة وأخرى Buffered/NIO/Stream وان كان بعد تصميم الDesign يمكن أن تتضح أماكن التحسين اذا وجدت الحاجة,,
بالتوفيق،،
هل من توضيح أكثر مع مثال؟
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
إنظر لل Javadoc الخاصه لل BlockingQueue و منه هذا المثال:
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}في حالتك أخي وجدي تستطيع بناء أكثر من producer لأنه لديك أكثر من ملف
لكن في حالتي وهي ملف واحد فأنا ملزم بواحد فقط
لكم جزيل الشكر يا شباب على مشاركتكم
أخي vector_ever
هذه مقالة قديمة كتبتها عن wait notify
لمحة جافاوية 25: المساجين الخيوط والسجانين الكائنات
فيها مثال عن consumer producer اطلع عليها وأخبرني لو أشكل عليك شيء ما
تحياتي