1、首先是定義
進程:是執行中一段程序,即一旦程序被載入到内存中并準備執行,它就是一個進程。進程是表示資源分配的的基本概念,又是調度運行的基本單位,是系統中的并發執行的單位。
線程:單個進程中執行中每個任務就是一個線程。線程是進程中執行運算的最小單位。
2、一個線程隻能屬于一個進程,但是一個進程可以擁有多個線程。多線程處理就是允許一個進程中在同一時刻執行多個任務。
3、線程是一種輕量級的進程,與進程相比,線程給操作系統帶來側創建、維護、和管理的負擔要輕,意味着線程的代價或開銷比較小。
4、線程沒有地址空間,線程包含在進程的地址空間中。線程上下文隻包含一個堆棧、一個寄存器、一個優先權,線程文本包含在他的進程 的文本片段中,進程擁有的所有資源都屬于線程。所有的線程共享進程的内存和資源。 同一進程中的多個線程共享代碼段(代碼和常量),數據段(全局變量和靜态變量),擴展段(堆存儲)。但是每個線程擁有自己的棧段, 寄存器的内容,棧段又叫運行時段,用來存放所有局部變量和臨時變量。
5、父和子進程使用進程間通信機制,同一進程的線程通過讀取和寫入數據到進程變量來通信。
6、進程内的任何線程都被看做是同位體,且處于相同的級别。不管是哪個線程創建了哪一個線程,進程内的任何線程都可以銷毀、挂起、恢複和更改其它線程的優先權。線程也要對進程施加控制,進程中任何線程都可以通過銷毀主線程來銷毀進程,銷毀主線程将導緻該進程的銷毀,對主線程的修改可能影響所有的線程。
7、子進程不對任何其他子進程施加控制,進程的線程可以對同一進程的其它線程施加控制。子進程不能對父進程施加控制,進程中所有線程都可以對主線程施加控制。
相同點:
進程和線程都有ID/寄存器組、狀态和優先權、信息塊,創建後都可更改自己的屬性,都可與父進程共享資源、都不鞥直接訪問其他無關進程或線程的資源。
,