什么是进程什么是线程,他们的区别是什么
定義
進(jìn)程是程序的一次運(yùn)行過(guò)程,進(jìn)程可以看成程序執(zhí)行的一個(gè)實(shí)例,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
線程是進(jìn)程的一個(gè)實(shí)體,是進(jìn)程的一條執(zhí)行路徑,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。
區(qū)別
1.地址空間和其他資源(如打開文件):進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其他進(jìn)程內(nèi)不可見(jiàn)。
進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
另外,進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
2.通信:進(jìn)程間通信IPC(管道,信號(hào)量,共享內(nèi)存,消息隊(duì)列),線程間可以直接獨(dú)寫進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)程通信——需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。
3.調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換快得多。
4.在多線程OS中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。
5、一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。
總結(jié)
以上是生活随笔為你收集整理的什么是进程什么是线程,他们的区别是什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql行锁和表锁
- 下一篇: jdk jre jvm三者之间的关系