Linux線程和進程的區別

我們創建進程一次只能做一件事,如果想要同時做幾件事,我們就得創建多進程,但是多進程之間的相互溝通是比較麻煩的,比如內存共享,描述符共享,互斥與同步等等而且在效率上也不如線程快捷。

在有了多線程以後,我們就可以在同一個進程中做多件事情。

進程又被認爲是執行中的程序;而線程是輕量級的進程。

線程的資源:

一個進程中的大部分信息對該進程的所有線程都是共享的;

  •  可執行程序的代碼;
  • 程序的全局內存;
  • 堆內存;
  •  棧;
  • 文件描述符;

當然線程還有一些自己獨享的資源:

  • 線程ID;(pthread_t此數據類型用一個結構來實現)
  • 線程自己的寄存器值;
  • 線程運行棧;
  • 調度優先級和調度策略;
  • 信號屏蔽字;
  • Errno變量;
  • 線程私有數據;

線程與進程的區別:

當一個進程被創建時,自動就有一個線程在運行,該線程就是主線程(main函數運行的那個線程),我們可以在主線程中調用pthread_create函數來創建一個線程,也可以在其他線程調用線程創建函數。

實際上,真正的程序執行體是進程中的線程!

所以可以理解爲,進程是一種空間上的概念,它爲所有的執行體(線程)提供必要的資源(文件,文件描述符,運行代碼等),而線程是時間上的概念,他類似於動態的指令執行過程。

可以把進程理解爲一個提供了環境和資源的工廠,而真正幹活的就是工廠中的工人(線程)。
最後,再來總結下線程的狀態:

線程只有3種狀態:就緒、執行、阻塞

線程存在5種基本的操作來切換線程的狀態:派生、阻塞、激活、調度、結束。

發佈了25 篇原創文章 · 獲贊 6 · 訪問量 5951
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章