Zstd: الاختلافات بين ملفات gzip و zstd

تم إنشاؤها على ١٩ سبتمبر ٢٠١٧  ·  4تعليقات  ·  مصدر: facebook/zstd

zstd على Linux: ملاحظتان

1) إذا بدأت gzip لضغط ملف كبير وإذا قمت بقتل gzip باستخدام ^ C ، فسيحذف gzip ملف الإخراج قبل الإنهاء. zstd حاليا لا تفعل ذلك. أعتقد أن سلوك gzip أفضل ، لأنه من الأفضل عدم وجود ملف إخراج بدلاً من أن يكون لديك ملف إخراج غير مكتمل أو تالف.

2) عند ضغط ملف أو فك ضغطه ، يستخدم zstd استدعاء النظام أدناه لإنشاء ملف الإخراج (من strace):
open("file.zst", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
يستخدم gzip و xz استدعاءات نظام مماثلة ، لكنهما يستخدمان الوضع 0600. يقومان بتبديل وضع ملف الإخراج إلى الوضع المطلوب بعد إغلاق الملف. هل هناك سبب لاستخدام zstd 0666؟ أعتقد أن 0600 سيكون أفضل: لا تسمح بوصول القراءة للمستخدمين الآخرين قبل أن يصبح الملف جاهزًا.

feature request question

ال 4 كومينتر

  1. يتطلب تعويض الحدث ^C معالج إشارة. أنا لم أنظر في ذلك بعد. أنا قلق أيضًا من مخاوف قابلية النقل.

  2. التتبع الخاص بك أكثر دقة من الكود الخاص بنا.
    استدعاء لفتح ملف الوجهة هنا:
    https://github.com/facebook/zstd/blob/dev/programs/fileio.c#L324
    إنه مجرد fopen("name", "wb"); قياسي ، نحن لا نتحكم في أي جزء خاص بالملكية.
    يحدث أن تترجم إلى هذا التتبع على نظامك ، فقط اعلم أننا لا نملك السيطرة عليه.
    بشكل عام ، نحاول أن نظل قريبين قدر الإمكان من المعيار C ، لأسباب تتعلق بإمكانية النقل (وتقليل صداع التبعية).

بادئ ذي بدء: شكرا لكتابة zstd. أنا مندهش من نسبة السرعة والضغط! لطيف جدا!

لا تتردد في إغلاق هذه التذكرة. ملاحظتي ليست سوى قطع صغيرة ، ولا بأس إذا قررت عدم فعل أي شيء.

  1. أوافق على أن الملائمة ^ C تتطلب معالج إشارة.
  2. مثير للإعجاب. لقد بحثت في الكود المصدري لـ xz وقاموا بفتح ملف الإخراج مع الكود أدناه:
      int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL;
      #ifndef TUKLIB_DOSLIKE
          flags |= O_NONBLOCK;
      #endif
      const mode_t mode = S_IRUSR | S_IWUSR;
      dest_fd = open( dest_name, flags, mode );

يستخدمون open () بدلاً من fopen () - وبالتالي يمكنهم التحكم في بتات الأذونات لملف الإخراج.

حسنًا ، أعتقد أن xz يستهدف أنظمة متوافقة مع POSIX ،
ومن ثم يمكن استخدام مكتبات posix بحرية ، على حساب عدم توافقها مع أنظمة غير posix أو تتطلب أغلفة مخصصة (يتبادر إلى الذهن Windows).

يحاول zstd أن يكون معيار C قدر الإمكان لتحسين منظور قابلية النقل.

من الناحية الفنية ، نستخدم أحيانًا بعض الواجهات المعتمدة على نظام التشغيل ، عندما لا يكون هناك مكافئ قياسي- C. في مثل هذه الحالة ، نحاول كتابة العديد من المتغيرات لدعم أهداف متعددة ، وبالنسبة للأهداف غير المدعومة ، يتم تعطيل الوظائف ذات الصلة بشكل نظيف (تميل إلى أن تكون غير أساسية).

بعد تعلم المزيد عنها ، يبدو أن الوظيفة signal() هي في الواقع جزء من المعيار C ، مما يجعلها سهلة الحمل.

في آخر تحديث للفرع dev ، أضفت Ctrl-C trapping إلى zstd cli.
عند الضغط على Ctrl-C ، يتم الآن مسح عنصر العملية (ملف وجهة غير مكتمل) قبل الخروج.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات