日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

fork() 成为负担,需要淘汰

發布時間:2023/11/21 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 fork() 成为负担,需要淘汰 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  微軟研究人員發表論文稱用于創建進程的fork 系統調用方式已經很落后,并且對操作系統的研究與發展產生了極大的負面影響,需要淘汰,作者同時提出了替代方案。

  相信每位開發者都對操作系統中的fork () 有一定的了解,至少知道它是用來創建進程的。fork 系統調用方式在 20 世紀 70 年代被創造出來,它通常與 exec () 組合使用,非常簡單卻很強大,被認為是一種天才式的設計、Unix 的偉大思想,至今 50 余年一直作為 POSIX 操作系統的原語存在,同時幾乎每個 Unix shell、主要 Web 和數據庫服務器、Google Chrome、Redis 甚至 Node.js 都使用 fork。

  然而微軟系統研究實驗室Redmond 的研究人員 3 月份卻發表了一篇論文,表示 fork 作為操作系統原語繼續存在,阻礙了對操作系統的研究,“它是來自另一個時代的遺物,不適合現代系統,并且會帶來一系列負面影響”,研究人員認為是時候將 fork 淘汰了。

  fork 簡單已成神話

  論文中承認了 fork API 的優點,包括簡單與緩解并發性,也肯定了 fork 在歷史上的重要貢獻,但更多地是列出了它在現代操作系統研究與發展中的弊端。

  研究人員認為 fork 本身就存在許多問題,另一方面,fork 在操作系統的研究與發展上也起了限制作用,論文指出有明確的證據表明支持 fork 限制了 OS 體系結構的變化,并限制了操作系統適應硬件演進的能力。

  乍一看可能會覺得 fork 很簡單,而這也是它的一大特征,但是實際上,“這是一個具有欺騙性的神話”。

  fork 的語義已經影響了每個創建進程狀態的新 API 的設計,POSIX 規范現在列出了關于如何將父狀態復制到子進度的 25 個特殊情況,包括文件鎖定、定時器、異步 IO 操作與跟蹤等。此外,許多系統調用標志控制 fork 關于內存映射(Linux madvise () 標記 MADV_DONTFORK/DOFORK/WIPEONFORK 等)、文件描述符(O_CLOEXEC、FD_CLOEXEC)和線程(pthread_atfork ())的行為。任何重要的操作系統工具都必須通過 fork 記錄其行為,并且用戶模式庫必須做好準備,以便隨時 fork 它們的狀態。fork 已經不再簡單。

  fork 不是線程安全的,Unix 進程支持線程,但 fork 創建的子進程只有一個線程(調用線程的副本),當一個線程在 fork 時,如果另一個線程此時進行內存分配并持有堆鎖,任何在子進程中分配內存的嘗試(從而獲得相同的鎖)都將立即發生死鎖。

  fork 很慢,fork 的性能一直是個問題,此前使用寫時復制技術使其性能可接受,但是在今天,建立寫時復制映射本身都成了一個性能問題,比如 Chrome 在 fork 時會經歷了長達 100 毫秒的延遲,Node.js 應用在 exec 之前 fork 時,可以被阻塞幾秒鐘。fork+exec 與spawn 的性能對比情況可以通過本文開頭的圖片直觀看到。

  fork 無法擴展,系統規模的設計首先要避免不必要的共享,但 fork 進程會與其父進程共享所有內容,由于 fork 復制了進程操作系統狀態的各個方面,這樣復制與引用計數成本會比較低,所以 fork 其實是趨向于將狀態集中在單片內核中,這就使得難以實現一些新技術,比如用于安全性和可靠性的內核劃分。

  fork 與異構硬件不兼容,它將進程的抽象與包含它的硬件地址空間混為一談。fork 將進程的定義限制為單個地址空間,并且是在某個核心上運行的單個線程。但現代硬件和在其上運行的程序并不是這樣,硬件異構化越來越嚴重,使用有內核旁路 NIC 的 DPDK 或帶有 GPU 的 OpenCL 的進程無法安全地 fork,因為操作系統無法復制 NIC/GPU 上的進程狀態。這個問題至少已經困擾了 GPU 程序員十年,而隨著未來的芯片上系統包含越來越多的狀態加速器,情況只會變得更糟。

  “GET THE FORK OUT OF MY OS!”

  論文提出了替代 fork 的方案:包括一個高級 Spawn API 和一個低級類微內核API 的組合。涉及到 posix_spawn ()、vfork ()、跨進程操作、clone ()、改進寫時復制內存等內容。

  fork 的問題越來越嚴重,作者最后總結出必須做三件事來糾正這種情況,不僅要棄用 fork,還要改善替代方案,同時糾正我們關于 fork 的教學內容,不能再錯誤地宣揚 fork 的能力與設計水平。

  論文地址:https://www.microsoft.com/en-us/research/publication/a-fork-in-the-road

總結

以上是生活随笔為你收集整理的fork() 成为负担,需要淘汰的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。