- Dua pertanyaan yang sering diajukan saat wawancara
- Coba tulis program untuk menghitung jumlah kata dalam file teks
- Menurut Anda, bagian mana yang menjadi bottleneck performa program ini?
- Orang sering menjawab "membaca dari file", tetapi sekarang hal itu tidak lagi benar
- Memang dulu seperti itu 10–20 tahun lalu, tetapi pada 2022 membaca secara sekuensial dari disk sudah sangat cepat (penulis juga tidak menyadarinya sebelum mengujinya sendiri)
- Bagian yang menjadi bottleneck adalah memproses/mem-parse input lalu mengalokasikannya ke memori: memecah menjadi kata, mengubah ke huruf kecil, menghitung frekuensi dengan hash table, dan sebagainya
- Saat diuji dengan file teks 413MB dalam Python/Go (file yang berisi King James Bible yang digabung 100 kali)
- Membacanya hanya memerlukan 0,1–0,2 detik, sedangkan pemrosesannya memakan waktu antara 7 hingga 2 detik
- Kesimpulannya, saat memproses "big data", disk I/O belum tentu menjadi bottleneck
14 komentar
Meski sama-sama akses sequential, tetap ada faktor seperti perbedaan antar bahasa, cara penggunaan pipeline I/O di tiap library, atau frekuensi permintaan API I/O oleh developer yang bisa memengaruhi hasilnya, jadi menurut saya klaim bahwa I/O bukan lagi bottleneck memerlukan prasyarat tertentu.
Network I/O itu bukan I/O? wkwkwk
Secepat apa pun, I/O tetaplah I/O; itulah alasan mengapa dalam pemrograman ada solusi tersendiri khusus untuk bagian I/O.
Semua disk big data pakai NVMe SSD? Wkwkwk, itu harganya jadi berapa...
Sebagai orang yang sangat menderita karena disk I/O dan harus mengerjakan hal-hal agar platter bergerak sesedikit mungkin, ini cerita yang terasa menarik.
Di isi tulisannya ada pembahasan tentang "sequential".
Kalau sama sekali tidak melakukan seek, mungkin ini bukan cerita yang salah.
Ini adalah eksperimen dengan premis yang keliru.
Mohon penjelasan tambahan.
Bottleneck itu sendiri adalah konsep yang berkaitan dengan waktu yang relatif.
Membandingkan kecepatan CPU dengan I/O adalah hal yang tepat.
Hanya karena I/O menjadi lebih cepat dibanding masa lalu, bukan berarti I/O bisa lebih cepat daripada CPU.
Bisa jadi menggunakan
mmapuntuk hanya memuatnya ke memori virtual, sementara pembacaan sebenarnya dilakukan setiap kali CPU melakukan komputasi.Komunikasi antara CPU dan semua memori (register, memori utama, disk) juga semuanya adalah I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work
Jadi penasaran apa tolok ukur yang akan menentukan big data.
Menarik.
Hari ini saya menambah satu pengetahuan lagi.
URL pada komentar pertama di https://news.ycombinator.com/item?id=33751266 juga menarik.
Napkin Math (matematika sederhana)
Katanya, I/O sekuensial kini hampir mendekati kecepatan memori..
Istilah napkin math ini namanya terlalu menarik.
Katanya saat membuat UTF-8, Rob Pike sempat mencoret-coret di atas serbet untuk menjelaskannya.