TGViewer
Programming ∀ Programming ∀ @programming_everyone · 1.35K subscribers
Post #3932 444
Programming ∀ Manashu strukturani parsingi tayyor, hashtable qoldi, lekin spec bo'yicha parsing tayyor. https://github.com/Susambil-Labs/journal-monad/blob/master/src/Journal.hs
Yana bir qiziq challenge.

Tassavur qiling biz bir filega Nta processdan turib content yozyabmiz va bu holatda race condition bo'lib contentlar kasha bo'lib tushish shansi bor. Masalan Process 1 hali yarmini yozib bo'lmasadan process 2 yozishni boshlaydi vaxakazo.

Ho'sh ushbu masalani qanday hal etsak bo'ladi ?

Hayolga keladigan eng sodda misollar quyidagicha.

1. File locking, bu huddi mutexlarni FSdagi versiyasiga o'xshaganroq conceptda ishlaydi. Lekin muammosi agar ko'p concurrent jobs bo'lsa deadlocks. Lekin garantiya beradi kernel darajasida.

2. Posix based systemlarda ham file descriptorda atomic operations qilsa bo'ladi. Masalan file desriptorni append modeda ochish orqali atomic writelar qilsak bo'ladi. Muammosi max buffer size 4KB.

3. Temp files, masalan har bir process alohida temp file ochadi va kegin safe merge qiladi. Muammosi consistencyga o'zingiz javob berishingiz kerak asosan.

4. Stariy dobriy centeralized mexanizmlar masalan bitta socketda eshitib turamiz va writelar shu socketga bo'ladi socket esa filega yozadi. Ammo over operations.

Bizni relago journalga barmoq bilan sanagulik darajadi processlar ulanadi. Shu sababli bizga mos keladigan va osonroq bitadigan ish bu albatta file locking mechanism. Resurs kam yeydi keginchalik mmap qivolish ham oson va eng muhimi read va write streamlar alohida bo'ladi shu sababli chala loglarni read qilish kabi narsalarga ham duch kelmaymiz. Agar bizni journal entrylar 4kb dan kam bo'lganida atomic qilar edik lekin bunga aniq garantiyalar yo'q xozircha write agnostic qilib entryni chunksdan yeg'ib oladigan qilsa bo'ladi lekin unga oldin max 4kblik buffer qilish kerak hullas ish ko'proq. Qolgan yechimlar esa yoki perfomance issue yoki bo'lmasam optimizatsiya uchun ko'proq code yozish kerak va ularning natijasi ham noaniq.

References:
https://gavv.net/articles/file-locks/
https://www.diskodev.com/posts/linux-atomic-operations-on-files/
https://pvk.ca/Blog/2021/01/22/appending-to-a-log-an-introduction-to-the-linux-dark-arts/
Victor Gaydov File locking in Linux File locking is a mutual-exclusion mechanism for files. Linux supports two major kinds of file locks: advisory locks mandatory locks Below we discuss all lock types available in POSIX and Linux and provide usage examples.
More from @programming_everyone
  1. Oct 7, 2026Haskell, Rust, Nix temasida qiziquvchilar ancha ko'payibtiku 👍
  2. Oct 7, 2026Shu basic arithmetic interpeterni kamida 20+ marotaba turlicha tilda turlicha uslublarda y…
  3. Oct 7, 2026Send him 2-3 years Haskell and forget.
  4. Oct 7, 2026photo post
  5. Oct 6, 2026Post #4367
  6. Oct 6, 2026Yana bir prikol narsa aytaymi ? Manashu literal tiplar evaziga typescriptda daje tiplar bi…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →