Brian Kernighan menjelaskan dalam video ini daya tarik Bell Labs awal untuk bahasa kecil / program yang didasarkan pada keterbatasan memori
Mesin besar akan menjadi 64 k-byte - K, bukan M atau G - dan itu berarti setiap program tidak bisa sangat besar, dan ada kecenderungan alami untuk menulis program kecil, dan kemudian mekanisme pipa, pada dasarnya input redirection input, memungkinkan untuk menghubungkan satu program dengan yang lain.
Tapi saya tidak mengerti bagaimana ini dapat membatasi penggunaan memori mengingat fakta bahwa data harus disimpan dalam RAM untuk mentransmisikan antar program.
Dari Wikipedia :
Di sebagian besar sistem mirip Unix, semua proses pipa dimulai pada saat yang sama [penekanan tambang], dengan aliran mereka terhubung dengan tepat, dan dikelola oleh penjadwal bersama dengan semua proses lain yang berjalan pada mesin. Aspek penting dari ini, mengatur pipa Unix terpisah dari implementasi pipa lainnya, adalah konsep buffering: misalnya program pengiriman dapat menghasilkan 5.000 byte per detik, dan program penerima hanya dapat menerima 100 byte per detik, tetapi tidak ada data hilang. Sebagai gantinya, output dari program pengiriman disimpan dalam buffer. Ketika program penerima siap untuk membaca data, maka program berikutnya dalam pipa membaca dari buffer. Di Linux, ukuran buffer adalah 65536 byte (64KB). Filter pihak ketiga open source yang disebut bfr tersedia untuk menyediakan buffer yang lebih besar jika diperlukan.
Ini lebih membingungkan saya, karena ini benar-benar mengalahkan tujuan program kecil (meskipun mereka akan modular hingga skala tertentu).
Satu-satunya hal yang dapat saya pikirkan sebagai solusi untuk pertanyaan pertama saya (keterbatasan memori menjadi masalah tergantung pada data ukuran) adalah bahwa set data besar tidak dihitung saat itu dan pipa masalah sebenarnya dimaksudkan untuk menyelesaikan adalah jumlah memori yang dibutuhkan oleh program itu sendiri. Tetapi mengingat teks tebal dalam kutipan Wikipedia, bahkan ini membingungkan saya: karena satu program tidak diterapkan pada suatu waktu.
Semua ini akan sangat masuk akal jika file temp digunakan, tapi ini pemahaman saya bahwa pipa tidak menulis ke disk (kecuali swap digunakan).
Contoh:
sed 'simplesubstitution' file | sort | uniq > file2
Jelas bagi saya bahwa sed
membaca dalam file dan meludahkannya secara garis demi garis. Tapi sort
, seperti yang dinyatakan BK dalam video yang ditautkan, adalah perhentian penuh, jadi semua data harus dibaca ke dalam memori (atau bukan?), Lalu diteruskan ke uniq
, yang (menurut saya) akan menjadi satu. Program-line-pada-waktu. Tetapi antara pipa pertama dan kedua, semua data harus ada dalam memori, bukan?
unless swap is used
swap selalu digunakan ketika tidak ada cukup RAM