進程是一個執行中的程序。每一個進程都擁有本身的地址空間、內存、數據棧以及其它用於跟蹤執行的輔助數據。微信
一個程序運行就是一個進程(好比 QQ、微信或者其它軟件);多線程
進程能夠經過派生新的進程來執行其它任務(好比在同一個電腦上登陸兩個 QQ);併發
每一個進程都有本身獨立的數據,只能經過進程間通訊(IPC)的方式共享信息。函數
線程(有時候稱爲輕量級進程)與進程相似,不過它們是在同一個進程下執行的,並共享相同的上下文。能夠將他們認爲是在一個主進程或者「主線程」中並行運行的一些「迷你進程」。spa
線程包括開始、執行順序和結束三部分;線程
當其它線程運行時,它能夠被搶佔(中斷)和臨時掛起(也稱爲睡眠)——這種作法叫作讓步;進程
一個進程中的各個線程與主線程共享同一片數據空間;內存
線程通常是以併發方式執行的;(在單核 CPU 系統中不是真正的併發,是每一個線程運行一小會兒再讓出給其它線程運行,連續快速的切換,因此看起來像是併發);同步
若是兩個或多個線程訪問同一片數據,因爲訪問順序不一致可能致使結果不一致。——這種狀況稱爲「競態條件」(大多數線程庫有一些同步原語註釋,容許線程管理器控制執行和訪問)it
線程沒法給予公平的執行時間。一些函數會在完成前保持阻塞狀態,若是沒有專門爲多線程狀況進行修改,會致使 CPU 的時間分配向這些貪婪的函數傾斜。