進程和線程的區別?
從實例去引入我們的進程和線程的概念,說出進程和線程的關系,引出線程,說出兩者的內存分配占用,上下文切換的區別
當操作系統把我們磁盤中的程序加載到我們的內存當中,為其分配內存空間,就產生了一個進程,進程可以說是操作系統進行資源分配和管理的基本單位,因為每個進程都有獨立的內存空間,所以上下文切換開銷較大,而線程可以認為是輕量級別的進程,存在于進程中,與多個線程共享進程內存空間,其中存放的是我們的指令流,上下文切換相較于進程開銷更小,只需要切換棧和寄存器等少量信息,線程可以說是操作系統進行任務調度和任務執行的單元
并行和并發有什么區別?
并行就是同一時間,多個任務被同時執行,通常需要多核cpu來實現,每個cpu核心可以獨立執行一個或者多個線程。就像我們以邊聽歌以便寫代碼
并發就是一段時間內多個任務交替執行,單核cpu也通過時間片輪轉機制來實現在不同任務之間切換,在宏觀上看著好像他們在同時執行,但是微觀上實際上只有一個任務真正占用了cpu資源