ما هو ترتيب الإدراج إذا كان لدي اثنين من المخازن المؤقتة المعينة للذاكرة المعينة إلى نفس الملف?
-
21-12-2019 - |
سؤال
سؤالي هو ما إذا كان نظام التشغيل سوف يحترم أمر الإدراج (أي.آخر مكتوب ، آخر قرص) أو سيكون الطلب غير متوقع.على سبيل المثال:
byte[] s1 = "Testing1!".getBytes();
byte[] s2 = "Testing2!".getBytes();
byte[] s3 = "Testing3!".getBytes();
RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbb1 = fc.map(MapMode.READ_WRITE, 0, 1024 * 1024);
mbb1.put(s1);
MappedByteBuffer mbb2 = fc.map(MapMode.READ_WRITE, mbb1.position(), 1024 * 1024);
mbb2.put(s2);
MappedByteBuffer mbb3 = fc.map(MapMode.READ_WRITE, mbb1.position() + mbb2.position(), 1024 * 1024);
mbb3.put(s3);
mbb1.put(s1); // overwrite mbb2
mbb1.put(s1); // overwrite mbb3
mbb1.force(); // go to file
mbb3.force(); // can this ever overwrite mbb1 in the file?
mbb2.force(); // can this ever overwrite mbb1 in the file?
هل هو دائما آخر مكتوب, آخر في أو أنا في عداد المفقودين شيء هنا?
المحلول
لم أختبر أيا من هذا ، لذلك لا أعرف.
ولكن ، بصراحة ، ليس هناك ما يضمن على أي من هذا الطلب.
لديك mbb.force()
الطريقة ، ولكن هذه ليست الطريقة الوحيدة للكتابة على الجهاز ، بل إنها تضمن فقط أنه قد تمت كتابته.
فم يمكن مسح الصفحة مرة أخرى إلى الجهاز كلما شعرت بذلك ، وذلك باستخدام أي جدول تراه مناسبا ، وهو ، بطبيعة الحال ، منصة للغاية تعتمد (السلوك على لينكس قد تكون مختلفة عن السلوك على ويندوز ، فإنه قد تختلف حتى من لينكس إلى لينكس أو ويندوز إلى ويندوز).
يبدو أنه يجب عليك التنسيق داخليا للتأكد من أن لديك مخزنا مؤقتا واحدا للقراءة/الكتابة تم تعيينه إلى منطقة معينة من الملف ، وإدارة التعارضات والتداخل بهذه الطريقة بدلا من الاعتماد على نظام التشغيل.
تحرير:"التغييرات التي تم إجراؤها بواسطة مخازن مؤقتة متعددة تم تعيينها للذاكرة مضمونة لتكون متسقة"
ببساطة ، هذا يعني أن الجهاز الظاهري الأساسي ، بمجرد تعيين صفحة فعلية في عملية ما ، يتم مشاركة هذا التعيين عبر جميع التعيينات المتنوعة التي يتم تنفيذها.ترجع مشكلات مؤشر الترابط ببساطة إلى التخزين المؤقت لذاكرة وحدة المعالجة المركزية ومشكلات أخرى.
لذلك ، يضمن هذا أن جميع التعيينات سترى نفس البيانات داخل مخزن مؤقت متداخل.لكنه لا يعالج متى سيتم كتابة المخازن المؤقتة بالفعل على الجهاز.هذه النقاط لا تزال وثيقة الصلة.
بشكل عام ، يبدو أنك لن تواجه مشكلة إذا تعاملت مع أي جوانب متعددة بشكل صحيح ، وكن على دراية بأن ما تراه في المخزن المؤقت الأساسي قد "يتغير تحت قدميك".