2020-12-11:多個線程同時寫同一個日志文件,為什么相互寫的內容不會被覆蓋?

      網友投稿 1024 2025-03-31

      2020-12-11:多個線程同時寫同一個日志文件,為什么相互寫的內容不會被覆蓋?

      福哥答案2020-12-11:

      [答案來自此鏈接:](https://bbs.csdn.net/topics/398512874)

      這是道面試題,可惜我沒什么思路,網上找了些答案。如果有更好的答案,請直接評論。

      1.沒看代碼前,以為會用到緩存隊列+組提交。

      2.golang的日志源碼位于log/log.go中的Output方法。加鎖了。

      3.系統級別。當打開文件并設置了O_APPEND標識,內核會共享文件寫入游標,保證內容不會被覆蓋。

      這個問題涉及到 系統底層 ,這就要看 操作 系統, 與 Windows 不同, Linux 允許一個文件在寫入的時候被讀取(或者在被讀取的時候寫入)。

      Linux 通過文件描述符表維護了打開的文件描述符信息,而文件描述符表中的每一項都指向一個內核維護的文件表,文件表指向打開的文件的 vnode(Unix) 和 inode。同時,文件表保存了進程對文件讀寫的偏移量等信息。

      但是 那么我們要如何保證讀取與寫入的一致性呢? Linux 提供了 fcntl 系統調用,可以鎖定文件。

      文件鎖是與進程相關的,一個進程中的多個線程/協程對同一個文件進行的鎖操作會互相覆蓋掉,從而無效。

      fcntl 創建的鎖是建議性鎖,只有寫入的進程和讀取的進程都遵循建議才有效;對應的有強制性鎖,會在每次文件操作時進行判斷,但性能較差,因此 Linux/Unix 系統默認采用的是建議性鎖。

      ***

      [評論](https://user.qzone.qq.com/3182319461/blog/1607641238)

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS表格中的行高以磅為單位 列寬以厘米為單位(wps表格行高最大409)
      下一篇:圖文詳解如何使用Word 2010目錄功能快速生成論文目錄(怎樣使用百度文庫)
      相關文章
      亚洲欧美日韩一区二区三区在线| 久久亚洲国产精品五月天| 亚洲AV一宅男色影视| 亚洲欧洲一区二区三区| 在线亚洲v日韩v| 国产亚洲精品第一综合| 国产亚洲美女精品久久久久| 狠狠综合亚洲综合亚洲色| 国产青草亚洲香蕉精品久久| 国产精品亚洲va在线观看| 全亚洲最新黄色特级网站 | 国产成人高清亚洲一区久久| 爱爱帝国亚洲一区二区三区| 亚洲AV无码一区二区三区国产| www国产亚洲精品久久久| 亚洲成av人片一区二区三区| 亚洲精品无码专区2| 国产亚洲精品影视在线产品| 久久亚洲国产中v天仙www| 亚洲国产精品国自产拍AV| 亚洲免费视频在线观看| 91亚洲国产在人线播放午夜| 亚洲精品乱码久久久久久下载 | 国产精品亚洲w码日韩中文| 国产午夜亚洲精品国产成人小说| 亚洲精品无码永久中文字幕| 亚洲AV无码精品无码麻豆| 少妇中文字幕乱码亚洲影视| 老司机亚洲精品影院在线观看| 亚洲AV成人一区二区三区观看| 久久久久久亚洲精品影院| 国产AV旡码专区亚洲AV苍井空| 亚洲综合av一区二区三区不卡| 亚洲女子高潮不断爆白浆| 亚洲AV色无码乱码在线观看| 4338×亚洲全国最大色成网站| 亚洲人成亚洲人成在线观看| 亚洲最大成人网色| 亚洲六月丁香婷婷综合| 久久亚洲色WWW成人欧美| 亚洲精品麻豆av|