先舉一個例子:
當我們使用VsCode時,如果開啟了自動保存功能。那么我們在寫代碼時,VsCode需要做兩件事情,第一件事情是,監(jiān)聽我打字輸入的狀態(tài);第二件事情是,每5分鐘保存一次代碼。
如果這個進程中只有一個線程的話,那么當VsCode在對代碼進行保存時,它就不能監(jiān)聽我打字輸入的狀態(tài)了,我的任何輸入都會沒有響應,這種用戶體驗是十分不好的。
所以我們需要使用多線程,每個線程處理自己那一部分任務,而不用關心會和其他線程的沖突。線程1用于響應鍵盤,線程2用于自動保存。
進程
進程是并發(fā)執(zhí)行程序在執(zhí)行過程中資源分配的最小單位
線程
線程是程序執(zhí)行的最小單位
線程與進程的區(qū)別
- 一個進程中可以有多個線程,線程依賴于進程
- 每個進程都擁有獨立的內存地址空間,而線程共享進程的這個內存地址空間
多線程的好處:
- 線程更輕量級,線程創(chuàng)建和銷毀的代價更小
- 線程提高了性能。雖然線程從宏觀角度來說是并行的,但其實從微觀角度來說,還是串行的,從這一個角度來看,并沒有提高性能。但是,當某些線程涉及到等待資源的時候(比如等待輸入),多線程允許進程中的其他線程繼續(xù)執(zhí)行,而不是整個進程被阻塞,因此,提高了cpu的利用率。
- 在多cpu或者多核的情況下,線程宏觀,微觀都是并行的。