توضیحات · یک

دانلود تک‌گذر چگونه کار می‌کند

بیشتر آنچه این برنامه را سریع می‌کند مسیر شبکهٔ تندتر نیست. این است که داده فقط یک بار جابه‌جا می‌شود. این یعنی چه در عمل، چرا چیزی جدا از استخراج مستقیم است، کدام شکل‌های بایگانی از آن جان سالم به در می‌برند، و حذف چرخهٔ بنویس-و-دوباره-بخوان روی ماشینی واقعی در عمل چقدر می‌ارزد.

نقطهٔ آغاز

یک دانلود Usenet به‌طور سنتی چه می‌کند

یک پست هزاران مقالهٔ کوچک رمزگذاری‌شده است که با هم مجموعه‌ای از جلدهای بایگانی می‌سازند، و آن‌ها به نوبهٔ خود فایلی را در بر دارند که واقعاً می‌خواهی. رسیدن از اولی به دومی به‌طور سنتی چهار کار جداگانه بوده، که هرکدام پیش از آغاز بعدی تمام می‌شود.

  1. دانلود و رمزگشایی. هر مقاله را بیاور، رمزگشایی‌اش کن، و جلدهای بایگانیِ دوباره‌سرهم‌شده را روی دیسک بنویس. برای انتشاری 60 GB این یعنی 60 GB نوشته‌شده.
  2. وارسی. هر 60 GB را برای سنجش با دادهٔ توازن از دیسک بازخوانی کن، و اگر چیزی ایراد داشت ترمیمش کن.
  3. باز کردن. جلدها را دوباره بخوان، و محتوای استخراج‌شده را کنارشان بنویس. حالا 120 GB روی دیسک است.
  4. پاک‌سازی. جلدها را حذف کن، تا محتوا بماند.

هر مرحله درست است، و نتیجه صحیح. اما محتوا دو بار نوشته شده، دست‌کم دو بار خوانده شده، و در اوج، دیسک ناچار بوده دو نسخهٔ کامل از کاری را نگه دارد که تو تنها یک نسخه‌اش را می‌خواستی. ساعتی که تو تجربه می‌کنی هر چهار مرحله پشت سر هم است، و برای همین یک برنامه می‌تواند دانلودی سریع گزارش دهد و باز هم تو را منتظر بگذارد.

تغییر

به‌جایش یک بار انجامش دادن

تک‌گذر یعنی بایت‌ها از شبکه به مقصد نهایی‌شان می‌روند بی‌آنکه هرگز روی دیسک تو فایل بایگانی شوند. مرحلهٔ دو یا سه وجود ندارد، چون کار هر دو در حالی انجام می‌شود که مرحلهٔ یک هنوز در جریان است.

در عمل، هر مقاله به‌محض رسیدن در حافظه رمزگشایی می‌شود و یک‌راست هم‌زمان به دو چیز سپرده می‌شود. وارسی‌کننده بی‌درنگ آن را با دادهٔ توازن می‌سنجد، پس درستی همان‌طور که داده فرود می‌آید اثبات می‌شود نه با بازخوانی بعدی. استخراج‌کننده بایت‌های ورودی را به‌عنوان موقعیتی درون بایگانی می‌بیند، حساب می‌کند به کدام بخش از کدام فایل محتوا تعلق دارند، و همان‌جا می‌نویسدشان.

جلدهای بایگانی هرگز سرهم نمی‌شوند. آن‌ها تا وقتی دانلود در پرواز است همچون ساختاری وجود دارند که استخراج‌کننده می‌فهمدش، و تنها چیزی که به دیسک تو می‌رسد فایلی است که می‌خواستی. وقتی آخرین مقاله می‌رسد عملاً چیزی برای انجام نمانده، و به همین دلیل زمان‌های پایان ما نزدیک خودِ زمان دانلود است نه دانلود به‌علاوهٔ یک دنباله.

پیامد سنجش‌پذیر: برای همان کار حدود نصف می‌نویسیم، بسیار کمتر بازمی‌خوانیم، و به‌جای دو برابر، تقریباً به اندازهٔ خودِ محتوا فضای آزاد لازم داریم. در انتشاری 190 GB این یعنی حدود 157 GB فضای آزاد در برابر حدود 313 GB، و تقریباً یک‌سوم ترافیک دیسک.

دو چیز این کار را سخت‌تر از آنچه به نظر می‌رسد می‌کند، و همان‌ها دلیل کمیابی‌اش هستند. مقاله‌ها به ترتیب نمی‌رسند، پس استخراج‌کننده باید از پس بایت‌هایی برآید که به‌جای جریانی از ابتدا، در موقعیت‌های دلخواه فرود می‌آیند. و بایگانی فشرده را نمی‌شود از میانه باز کرد، پس هر بخش از کار که واقعاً ترتیب می‌خواهد باید شناخته و جداگانه رسیدگی شود نه اینکه با فرض کنار گذاشته شود.

مقایسه‌ای که از آن می‌پرسند

چرا این استخراج مستقیم نیست

استخراج مستقیم قابلیت خوبی است و برنامه‌هایی که دارندش با آن بهترند. ضمناً بخش دیگری از مسئله را حل می‌کند، و تفاوت دقیقاً جایی پیدا می‌شود که اهمیت دارد.

استخراج مستقیم پیش از پایان دانلود شروع به استخراج می‌کند، پس مرحلهٔ سه به‌جای آنکه پس از مرحلهٔ یک بیاید با آن هم‌پوشانی می‌یابد. آنچه نمی‌کند حذف مرحلهٔ یک است. جلدهای بایگانی همچنان به‌طور کامل روی دیسک تو نوشته می‌شوند، چون بازکننده یک بازکنندهٔ متعارف است که فایل‌های متعارف می‌خواند؛ استخراج مستقیم فقط زودتر به کارش می‌اندازد. دو نسخه همچنان هست، دو نوشتن همچنان رخ می‌دهد، و نیاز به فضای آزاد تغییری نمی‌کند.

نوشتن جلدها روی دیسکفضای آزاد لازمچند بار محتوا نوشته می‌شود
دانلود، سپس باز کردنبله، سپس بازخوانی~2× کار2
استخراج مستقیمبله، زودتر بازخوانی می‌شود~2× کار2
تک‌گذرهرگز نوشته نمی‌شوند~1× کار1

تفاوت دوم این است که وقتی شکل ساده نیست چه پیش می‌آید. چون استخراج مستقیم با پیدا شدن جلدها کار را به بازکننده‌ای متعارف می‌سپارد، به وضعیتی بی‌دردسر نیاز دارد: جلدها به ترتیبی قابل‌استفاده حاضر باشند، ترمیمی در انتظار نباشد، چیزی نباشد که اول باید قفلش باز شود، و بایگانی‌ای که محتوایش خودش بایگانی نباشد. وقتی هرکدام از این‌ها برقرار نباشد، کار عاقلانه عقب‌نشینی و بازگشت به باز کردن در پایان است، و همین هم رخ می‌دهد. نتیجه‌ای درست می‌گیری و زمان‌بندی معمول را.

چون استخراج‌کنندهٔ ما از همان آغاز حول بایت‌های بی‌ترتیب ساخته شده، آن وضعیت‌ها برایش استثنا نیستند. تمایز واقعی همین است: نه اینکه زودتر شروع می‌کنیم، بلکه اینکه به شرط‌هایی تکیه نمی‌کنیم که بارها برقرار نیستند.

واقعاً چه چیزی از آن جان سالم به در می‌برد

شکل‌هایی که از پسشان برمی‌آید

چنین طراحی‌ای تنها وقتی ارزش دارد که بر پست‌هایی صدق کند که واقعاً با آن‌ها روبه‌رو می‌شوی، نه بر بهترین حالت تمیز. وضعیت کنونی: هیچ قالب ظرفی فقط روی دیسک رسیدگی نمی‌شود. RAR، 7z و zip همه از مسیر تک‌گذر می‌گذرند.

شکلتک‌گذریادداشت‌ها
RAR، ذخیره‌شده (بدون فشرده‌سازی)بلهحالت رایج در انتشارهای رسانه‌ای
RAR، فشردهبلهاز جمله بایگانی فشرده به‌عنوان لایهٔ بیرونی
RAR 1.5، 3، 4 و 5بلههر چهار نسل این قالب
7zبلهاز جمله محتوای فشرده‌شده با deflate
zipبلهاز جمله محتوای bzip2 و LZMA
محتوای رمزگذاری‌شدهبلهبا گذرواژه، از جمله zip رمزگذاری‌شده
سرآیندهای رمزگذاری‌شدهبلهجایی که نام فایل‌ها هم پنهان است
زنجیره‌های گذرواژهبلهگذرواژهٔ هر لایه در لایهٔ بالاتر بسته‌بندی شده
بایگانی‌های تودرتوبلهدر حین کار از تودرتویی درمی‌آیند، تا عمقی قابل تنظیم
آسیب‌دیده در چند لایهبلهترمیم در هر سطح، همچنان یک گذر
مجموعه‌های تقسیم‌شدهٔ عددیبلهتقسیم‌هایی به سبک name.001
بایگانی‌های خوداستخراجگذر روی دیسکبایگانی از ابتدای فایل شروع نمی‌شود
zip چندپاره (.z01)گذر روی دیسکو چند گونهٔ کمیاب‌تر zip
کارهای ازسرگرفتهگذر روی دیسککاری که پس از راه‌اندازی دوباره ادامه یابد به شیوهٔ متعارف تمام می‌شود

این سه امتناع صادقانه‌اند و همه یک‌جور رفتار می‌کنند: کار به‌درستی و از مسیر متعارف تمام می‌شود، و برای آن دانلود زمان‌بندی معمولِ دونسخه‌ای را می‌گیری. چیزی شکست نمی‌خورد؛ فقط دیگر به آن معنایی که بقیهٔ این صفحه توصیف می‌کند سریع نیست. بایگانی‌های خوداستخراج به دلیلی ساختاری رد می‌شوند نه از کم‌کاری: شناختن یک بایگانی از نخستین بایت‌هایش وقتی نخستین بایت‌ها یک برنامه‌اند نمی‌تواند کار کند.

سطرهای تودرتو و رمزگذاری‌شده آن‌هایی هستند که جدی گرفتنشان می‌ارزد، چون همان‌جاست که بیشتر برنامه‌ها کار را به تو پس می‌دهند. روی پیکره‌ای تولیدشده از ده شکل تودرتو، که با درهم‌سازی محتوا نمره‌گذاری شده تا برنامه‌ای که نام محتوا را عوض می‌کند هم امتیاز بگیرد، ما 9 مورد از 10 را بدون دخالت تمام کردیم؛ بهترین برنامهٔ بعدی 5 مورد را تمام کرد، و دو برنامهٔ دیگر 2 مورد. تنها موردی که خودکار تمامش نمی‌کنیم نردبانی ده‌سطحی است، که در سقف عمق پیش‌فرض پنج تمیز پایان می‌یابد و عمیق‌ترین لایه را همچون بایگانی سالم می‌گذارد، و اگر سقف را بالا ببری کامل تمام می‌شود. آن دورها با جدول کامل در صفحهٔ محک‌ها هستند.

چرا ارزش انجام دادن دارد

حذف رفت‌وبرگشت واقعاً چه می‌خرد

سریع‌تر است، به دلیلی بی‌زرق‌وبرق. نوشتن 60 GB و بازخواندنش حتی روی درایو حالت‌جامدِ سریع هم مجانی نیست، و روی هر چیز کندتر اغلب گلوگاه واقعی است نه شبکه. حذف یک نوشتن و دو خواندن آن زمان را تماماً از ساعت تو برمی‌دارد. سود دقیقاً همان‌جا بیشترین است که مردم بیشتر متوجهش می‌شوند: کارهای بزرگ، و ماشین‌هایی که دیسکشان سریع‌ترین بخششان نیست.

فرسایش را نصف می‌کند. درایوهای حالت‌جامد شمار محدودی نوشتن در خود دارند، و دانلودری که هر محتوا را دو بار می‌نویسد آن بودجه را با دو برابر سرعت خرج می‌کند بی‌آنکه سودی به تو برسد. در طول چند صد ترابایت دانلود، که برای کاربری فعال سالی معمولی است، تفاوت کسر معناداری از عمر یک درایو است.

آنچه را جا می‌شود عوض می‌کند. فضای آزاد ویژگی کارایی نیست، بله یا خیر است. کاری که دو برابر اندازهٔ خودش فضای مانور بخواهد یا اجرا می‌شود یا نمی‌شود. نیاز داشتن به حدود اندازهٔ محتوا یعنی کارهایی روی ماشین‌ها و حجم‌هایی تمام می‌شوند که رویکرد متعارف در آن‌ها به‌سادگی می‌ایستد، و برای همین انتشاری 190 GB اینجا در حدود 157 GB فضای آزاد جا می‌شود نه در حدود 313 GB.

زمان پردازندهٔ کمتری هزینه دارد. عبور ندادن داده از دیسک برای بار دوم، کار آن را حذف می‌کند، و وارسی حین دانلود یعنی هیچ گذر دومی روی محتوا برای بررسی‌اش لازم نیست. هزینهٔ پردازندهٔ ما روی حدود 1.7 ثانیهٔ پردازنده به ازای هر گیگابایت صاف می‌ماند، از کاری 35 GB تا کاری 190 GB، و همین ویژگی مفید است: هزینه به ازای گیگابایت با بزرگ شدن کار بزرگ نمی‌شود.

با حافظهٔ کمتر، و حافظهٔ کران‌دار اجرا می‌شود. چون بایت‌ها به‌جای انباشته شدن همان‌طور که می‌رسند مصرف می‌شوند، مجموعهٔ کاری بودجه‌ای است که تو تعیین می‌کنی نه تابعی از اندازهٔ کار. همین است که اجازه می‌دهد انتشاری 190 GB روی ماشینی با حدود 1.1 GB در دسترس پردازش شود. تمایز مهم عدد نیست، شکل است: حافظه‌ای که با کار بزرگ می‌شود سرانجام به کاری برمی‌خورد که ماشین تو نمی‌تواند تمامش کند، و به‌جای اینکه به تو بگوید، با جابه‌جایی به دیسک یا کشته شدن شکست می‌خورد.

روی‌هم‌رفته این‌ها کمتر دربارهٔ بردن یک محک است و بیشتر دربارهٔ اینکه نرم‌افزار اصلاً کجا می‌تواند اجرا شود. طراحی‌ای که نصف فضای آزاد، نصف نوشتن‌ها و مقدار کران‌داری حافظه لازم دارد، روی کارساز خانگی کوچک، لپ‌تاپی قدیمی‌تر یا یک NAS کار می‌کند، و بخش خوبی از این نرم‌افزار واقعاً همان‌جا زندگی می‌کند.

هر عدد این صفحه سنجیده شده و با نسخهٔ ساخت و تاریخ در کنارش در صفحهٔ محک‌ها منتشر شده، از جمله دورهایی که می‌بازیم. وزنهٔ متقابل صادقانه، که آنجا هم گفته شده: استخراج‌کننده و ترمیم‌کننده‌ای که برای همراهی با دانلودی زنده ساخته شده‌اند، حافظهٔ مقیم بیشتری نگه می‌دارند تا ابزاری مستقل که یک بار از خط فرمان اجرا می‌شود؛ پس اگر قید تو کوچک‌ترین ردپای ممکن برای کاری یک‌باره روی فایلی است که از پیش داری، ابزارهای اختصاصی آن ستون را می‌برند.