在windows中的进程、线程和在linux中的进程、线程有什么区别? 在windows中的进程、线程和在linux中的进程、线程有...

\u8bf7\u95ee\u5728windows\u4e2d\u7684\u8fdb\u7a0b\u3001\u7ebf\u7a0b\u548c\u5728linux\u4e2d\u7684\u8fdb\u7a0b\u3001\u7ebf\u7a0b\u6709\u4ec0\u4e48\u533a\u522b\uff1f

\u5728WINDOS\u91cc\uff0c"\u8fdb\u7a0b"\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u800c"\u7ebf\u7a0b"\u662f\u4e00\u4e2a"\u8fdb\u7a0b"\u91cc\u7684\u4e00\u4e2a\u6267\u884c"\u7ebf\u7d22"\u3002\u4ece\u6838\u5fc3\u4e0a\u8bb2\uff0c WINDOS\u7684\u591a\u8fdb\u7a0b\u4e0eLinux\u5e76\u65e0\u591a\u5927\u7684\u533a\u522b\uff0c\u5728WINDOS\u91cc\u7684\u7ebf\u7a0b\u624d\u76f8\u5f53\u4e8eLinux\u7684\u8fdb\u7a0b\uff0c\u662f\u4e00\u4e2a\u5b9e\u9645\u6b63\u5728\u6267\u884c\u7684\u4ee3\u7801\u3002\u4f46\u662f\uff0cWINDOS\u91cc\u540c\u4e00\u4e2a\u8fdb\u7a0b\u91cc\u5404\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u662f\u5171\u4eab\u6570\u636e\u6bb5\u7684\u3002\u8fd9\u624d\u662f\u4e0eLinux\u7684\u8fdb\u7a0b\u6700\u5927\u7684\u4e0d\u540c\u3002 \u4e0b\u9762\u8fd9\u6bb5\u7a0b\u5e8f\u663e\u793a\u4e86WINDOS\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u5982\u4f55\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u3002 int g; DWORD WINAPI ChildProcess( LPVOID lpParameter ){ int i; for ( i = 1; i <1000; i ++) { g ++; printf( "This is Child Thread: %d", g ); } ExitThread( 0 ); }; void main() { int threadID; int i; g = 0; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); for ( i = 1; i <1000; i ++) { g ++; printf( "This is Parent Thread: %d", g ); } } \u5728WINDOS\u4e0b\uff0c\u4f7f\u7528CreateThread\u51fd\u6570\u521b\u5efa\u7ebf\u7a0b\uff0c\u4e0eLinux\u4e0b\u521b\u5efa\u8fdb\u7a0b\u4e0d\u540c\uff0cWINDOS\u7ebf\u7a0b\u4e0d\u662f\u4ece\u521b\u5efa\u5904\u5f00\u59cb\u8fd0\u884c\u7684\uff0c\u800c\u662f\u7531 CreateThread\u6307\u5b9a\u4e00\u4e2a\u51fd\u6570\uff0c\u7ebf\u7a0b\u5c31\u4ece\u90a3\u4e2a\u51fd\u6570\u5904\u5f00\u59cb\u8fd0\u884c\u3002\u6b64\u7a0b\u5e8f\u540c\u524d\u9762\u7684UNIX\u7a0b\u5e8f\u4e00\u6837\uff0c\u7531\u4e24\u4e2a\u7ebf\u7a0b\u5404\u6253\u53701000\u6761\u4fe1\u606f\u3002 threadID\u662f\u5b50\u7ebf\u7a0b\u7684\u7ebf\u7a0b\u53f7\uff0c\u53e6\u5916\uff0c\u5168\u5c40\u53d8\u91cfg\u662f\u5b50\u7ebf\u7a0b\u4e0e\u7236\u7ebf\u7a0b\u5171\u4eab\u7684\uff0c\u8fd9\u5c31\u662f\u4e0eLinux\u6700\u5927\u7684\u4e0d\u540c\u4e4b\u5904\u3002\u5927\u5bb6\u53ef\u4ee5\u770b\u51fa\uff0cWINDOS\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u8981\u6bd4Linux\u590d\u6742\uff0c\u5728Linux\u8981\u5b9e\u73b0\u7c7b\u4f3cWINDOS\u7684\u7ebf\u7a0b\u5e76\u4e0d\u96be\uff0c\u53ea\u8981fork\u4ee5\u540e\uff0c\u8ba9\u5b50\u8fdb\u7a0b\u8c03\u7528ThreadProc\u51fd\u6570\uff0c\u5e76\u4e14\u4e3a\u5168\u5c40\u53d8\u91cf\u5f00\u8bbe\u5171\u4eab\u6570\u636e\u533a\u5c31\u884c\u4e86\uff0c\u4f46\u5728WINDOS\u4e0b\u5c31\u65e0\u6cd5\u5b9e\u73b0\u7c7b\u4f3cfork\u7684\u529f\u80fd\u4e86\u3002\u6240\u4ee5\u73b0\u5728WINDOS\u4e0b\u7684C\u8bed\u8a00\u7f16\u8bd1\u5668\u6240\u63d0\u4f9b\u7684\u5e93\u51fd\u6570\u867d\u7136\u5df2\u7ecf\u80fd\u517c\u5bb9\u5927\u591a\u6570Linux/UNIX\u7684\u5e93\u51fd\u6570\uff0c\u4f46\u5374\u4ecd\u65e0\u6cd5\u5b9e\u73b0fork\u3002 \u5bf9\u4e8e\u591a\u4efb\u52a1\u7cfb\u7edf\uff0c\u5171\u4eab\u6570\u636e\u533a\u662f\u5fc5\u8981\u7684\uff0c\u4f46\u4e5f\u662f\u4e00\u4e2a\u5bb9\u6613\u5f15\u8d77\u6df7\u4e71\u7684\u95ee\u9898\uff0c\u5728WINDOS\u4e0b\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u5458\u5f88\u5bb9\u6613\u5fd8\u8bb0\u7ebf\u7a0b\u4e4b\u95f4\u7684\u6570\u636e\u662f\u5171\u4eab\u7684\u8fd9\u4e00\u60c5\u51b5\uff0c\u4e00\u4e2a\u7ebf\u7a0b\u4fee\u6539\u8fc7\u4e00\u4e2a\u53d8\u91cf\u540e\uff0c\u53e6\u4e00\u4e2a\u7ebf\u7a0b\u5374\u53c8\u4fee\u6539\u4e86\u5b83\uff0c\u7ed3\u679c\u5f15\u8d77\u7a0b\u5e8f\u51fa\u95ee\u9898\u3002\u4f46\u5728Linux\u4e0b\uff0c\u7531\u4e8e\u53d8\u91cf\u672c\u6765\u5e76\u4e0d\u5171\u4eab\uff0c\u800c\u7531\u7a0b\u5e8f\u5458\u6765\u663e\u5f0f\u5730\u6307\u5b9a\u8981\u5171\u4eab\u7684\u6570\u636e\uff0c\u4f7f\u7a0b\u5e8f\u53d8\u5f97\u66f4\u6e05\u6670\u4e0e\u5b89\u5168\u3002

WINDOS\u91cc\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u662f\u7ee7\u627f\u81eaOS/2\u7684\u3002\u5728WINDOS\u91cc\uff0c"\u8fdb\u7a0b"\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u800c"\u7ebf\u7a0b"\u662f\u4e00\u4e2a"\u8fdb\u7a0b"\u91cc\u7684\u4e00\u4e2a\u6267\u884c"\u7ebf\u7d22"\u3002\u4ece\u6838\u5fc3\u4e0a\u8bb2\uff0c WINDOS\u7684\u591a\u8fdb\u7a0b\u4e0eLinux\u5e76\u65e0\u591a\u5927\u7684\u533a\u522b\uff0c\u5728WINDOS\u91cc\u7684\u7ebf\u7a0b\u624d\u76f8\u5f53\u4e8eLinux\u7684\u8fdb\u7a0b\uff0c\u662f\u4e00\u4e2a\u5b9e\u9645\u6b63\u5728\u6267\u884c\u7684\u4ee3\u7801\u3002\u4f46\u662f\uff0cWINDOS\u91cc\u540c\u4e00\u4e2a\u8fdb\u7a0b\u91cc\u5404\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u662f\u5171\u4eab\u6570\u636e\u6bb5\u7684\u3002\u8fd9\u624d\u662f\u4e0eLinux\u7684\u8fdb\u7a0b\u6700\u5927\u7684\u4e0d\u540c\u3002\u60f3\u5b66\u4e60\u4e86\u89e3\u66f4\u591alinux\u77e5\u8bc6\uff0c\u8bf7\u5173\u6ce8\u300alinux\u5c31\u8be5\u8fd9\u4e48\u5b66\u300b\u5b98\u7f51\u3002

对于windows来说,进程和线程的概念都是有着明确定义的,进程的概念对应于一个程序的运行实例(instance),而线程则是程序代码执行的最小单元。CreateThread()用于建立一个新的线程,传递线程函数的入口地址和调用参数给新建的线程,然后新线程就开始执行了。

windows下,一个典型的线程拥有自己的堆栈、寄存器(包括程序计数器PC,用于指向下一条应该执行的指令在内存中的位置),而代码段、数据段、打开文件这些进程级资源是同一进程内多个线程所共享的。因此同一进程的不同线程可以很方便的通过全局变量(数据段)进行通信,大家都可以对数据段进行读写,这很方便,也被在安全性方面诟病,因为它要求程序员时刻意识到这些数据不是线程独立的。

对于linux来说,则没有很明确的进程、线程概念。首先linux只有进程而没有线程,然而它的进程又可以表现得像windows下的线程。linux利用fork()和exec函数族来操作多进程。fork()函数可以在进程执行的任何阶段被调用,一旦调用,当前进程就被分叉成两个进程——父进程和子进程,两者拥有相同的代码段和暂时相同的数据段(虽然暂时相同,但从分叉开的时刻就是逻辑上的两个数据段了,之所以说是逻辑上的,是因为这里是“写时复制”机制,也就是,除非万不得已有一个进程对数据段进行了写操作,否则系统不去复制数据段,这样达到了负担最小),两者的区别在于fork()函数返回值,对于子进程来说返回为0,对于父进程来说返回的是子进程id,因此可以通过if(fork()==0)…else…来让父子进程执行不同的代码段,从而实现“分叉”。

而linux下的进程不能像windows下线程那样方便地通信,因为他们没有共享数据段、地址空间等。它们之间的通信是通过所谓IPC(InterProcess Communication)来进行的。具体有管道(无名管道用于父子进程间通信,命名管道可以用于任意两个进程间的通信)、共享内存(一个进程向系统申请一块可以被共享的内存,其它进程通过标识符取得这块内存,并将其连接到自己的地址空间中,效果上类似于windows下的多线程间的共享数据段),信号量,套接字。

1、windows里的进程/线程是继承自OS/2的。在windows里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲,windows的多进程与Linux并无多大的区别,在windows里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,windows里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。
2、在windows下,使用CreateThread函数创建线程,与Linux下创建进程同,windows线程不是从创建处开始运行的,而是由CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,windows的进程/线程要比Linux复杂,在Linux要实现类似
windows的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在windows下就无法实现类似fork的功能了。所以现在windows下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。
3、对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,windows下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

liunx 中只有进程没有线程。

  • 璇烽棶鍦╳indows涓殑杩涚▼銆绾跨▼鍜屽湪linux涓殑杩涚▼銆佺嚎绋嬫湁浠涔堝尯鍒...
    绛旓細浠庢牳蹇冧笂璁诧紝 WINDOS鐨勫杩涚▼涓嶭inux骞舵棤澶氬ぇ鐨勫尯鍒紝鍦WINDOS閲岀殑绾跨▼鎵嶇浉褰撲簬Linux鐨勮繘绋嬶紝鏄竴涓疄闄呮鍦ㄦ墽琛岀殑浠g爜銆備絾鏄紝WINDOS閲屽悓涓涓杩涚▼閲鍚勪釜绾跨▼涔嬮棿鏄叡浜暟鎹鐨勩傝繖鎵嶆槸涓嶭inux鐨勮繘绋嬫渶澶х殑涓嶅悓銆 涓嬮潰杩欐绋嬪簭鏄剧ず浜哤INDOS涓嬩竴涓繘绋嬪浣曞惎鍔ㄤ竴涓嚎绋嬨 int g; DWORD WINAPI Child...
  • 绾跨▼鏄粈涔堟剰鎬
    绛旓細绾跨▼鏄嫭绔嬭皟搴﹀拰鍒嗘淳鐨勫熀鏈崟浣嶃傜嚎绋嬪彲浠ヤ负鎿嶄綔绯荤粺鍐呮牳璋冨害鐨勫唴鏍哥嚎绋嬶紝濡俉in32绾跨▼锛涚敱鐢ㄦ埛杩涚▼鑷璋冨害鐨勭敤鎴风嚎绋嬶紝濡侺inux骞冲彴鐨凱OSIXThread锛涙垨鑰呯敱鍐呮牳涓庣敤鎴杩涚▼锛濡Windows7鐨勭嚎绋嬶紝杩涜娣峰悎璋冨害銆傜嚎绋嬬壒鐐癸細1銆佽交鍨嬪疄浣 绾跨▼涓殑瀹炰綋鍩烘湰涓婁笉鎷ユ湁绯荤粺璧勬簮锛屽彧鏄湁涓鐐瑰繀涓嶅彲灏戠殑銆佽兘淇濊瘉鐙珛杩愯鐨...
  • 杩涚▼鍜绾跨▼鏈変粈涔堝尯鍒?
    绛旓細绾跨▼鏄嫭绔嬭皟搴﹀拰鍒嗘淳鐨勫熀鏈崟浣嶃傜嚎绋嬪彲浠ヤ负鎿嶄綔绯荤粺鍐呮牳璋冨害鐨勫唴鏍哥嚎绋嬶紝濡俉in32绾跨▼锛涚敱鐢ㄦ埛杩涚▼鑷璋冨害鐨勭敤鎴风嚎绋嬶紝濡侺inux骞冲彴鐨凱OSIX Thread锛涙垨鑰呯敱鍐呮牳涓庣敤鎴杩涚▼锛濡Windows 7鐨勭嚎绋锛岃繘琛屾贩鍚堣皟搴︺3銆佷綔鐢ㄤ笉鍚 杩涚▼鏄搷浣滅郴缁熶腑鏈鍩烘湰銆侀噸瑕佺殑姒傚康銆傛槸澶氶亾绋嬪簭绯荤粺鍑虹幇鍚庯紝涓轰簡鍒荤敾绯荤粺鍐呴儴鍑虹幇鐨...
  • 杩涚▼鍜绾跨▼鐨勪綔鐢!鍦ㄤ粈涔堟儏鍐典笅浣跨敤!瀹冧滑鏈変粈涔堢壒鍒殑鍦版柟鍚?
    绛旓細绾跨▼鍦ㄦ墽琛岃繃绋嬩腑涓杩涚▼杩樻槸鏈夊尯鍒殑銆傛瘡涓嫭绔鐨勭嚎绋鏈変竴涓▼搴忚繍琛岀殑鍏ュ彛銆侀『搴忔墽琛屽簭鍒楀拰绋嬪簭鐨勫嚭鍙c備絾鏄嚎绋嬩笉鑳藉鐙珛鎵ц锛屽繀椤讳緷瀛樺湪搴旂敤绋嬪簭涓紝鐢卞簲鐢ㄧ▼搴忔彁渚涘涓嚎绋嬫墽琛屾帶鍒躲備粠閫昏緫瑙掑害鏉ョ湅锛屽绾跨▼鐨勬剰涔夊湪浜庝竴涓簲鐢ㄧ▼搴忎腑锛屾湁澶氫釜鎵ц閮ㄥ垎鍙互鍚屾椂鎵ц銆備絾鎿嶄綔绯荤粺骞舵病鏈夊皢澶氫釜绾跨▼鐪嬪仛澶氫釜...
  • win10杩涚▼wsappx鏄粈涔堣繘绋?
    绛旓細鐩稿叧瀹氫箟 杩涚▼锛圥rocess锛夋槸璁$畻鏈涓殑绋嬪簭鍏充簬鏌愭暟鎹泦鍚堜笂鐨勪竴娆¤繍琛屾椿鍔紝鏄郴缁熻繘琛岃祫婧愬垎閰嶅拰璋冨害鐨勫熀鏈崟浣嶏紝鏄搷浣滅郴缁熺粨鏋勭殑鍩虹銆傚湪鏃╂湡闈㈠悜杩涚▼璁捐鐨勮绠楁満缁撴瀯涓锛岃繘绋鏄▼搴忕殑鍩烘湰鎵ц瀹炰綋锛涘湪褰撲唬闈㈠悜绾跨▼璁捐鐨勮绠楁満缁撴瀯涓紝杩涚▼鏄嚎绋嬬殑瀹瑰櫒銆傜▼搴忔槸鎸囦护銆佹暟鎹強鍏剁粍缁囧舰寮忕殑鎻忚堪锛岃繘绋嬫槸绋嬪簭鐨...
  • windows鍐呮牳瀵硅薄鐨勪腑杩,绾跨▼鍚屾瀵硅薄鏈夊摢浜
    绛旓細绯荤粺浠庤繘绋嬬殑鍦板潃绌洪棿涓垎閰嶅唴瀛樼粰绾跨▼鏍堜娇鐢ㄣ傛柊绾跨▼涓庡垱寤哄畠鐨勭嚎绋嬪湪鐩稿悓鐨勮繘绋涓婁笅鏂囦腑杩愯銆傚洜姝わ紝鏂扮嚎绋嬪彲浠ヨ闂繘绋嬪唴鏍稿璞$殑鎵鏈夊彞鏌勩佽繘绋涓殑鎵鏈夊唴瀛樹互鍙婂悓涓涓繘绋嬩腑鍏朵粬鎵鏈夌嚎绋嬬殑鏍堛傝繖鏍蜂竴鏉ワ紝鍚屼竴涓繘绋嬩腑鐨勫涓嚎绋嬪彲浠ュ緢瀹规槗鐨勭浉浜掗氫俊銆
  • 瑙i噴涓涓杩涚▼鍜绾跨▼鐨勬蹇?
    绛旓細杩涚▼鏄搷浣滅郴缁熻繘琛岃祫婧愬垎閰嶇殑鍗曚綅銆鍦╓indows涓嬶紝杩涚▼鍙堣缁嗗寲涓绾跨▼锛屼篃灏辨槸涓涓繘绋嬩笅鏈夊涓兘鐙珛杩愯鐨勬洿灏忕殑鍗曚綅銆1.杩涚▼鐨勫紩鍏:澶氶亾绋嬪簭鍦ㄦ墽琛屾椂锛岄渶瑕佸叡浜郴缁熻祫婧愶紝浠庤屽鑷村悇绋嬪簭鍦ㄦ墽琛岃繃绋嬩腑鍑虹幇鐩镐簰鍒剁害鐨勫叧绯伙紝绋嬪簭鐨勬墽琛岃〃鐜板嚭闂存柇鎬х殑鐗瑰緛銆傝繖浜涚壒寰侀兘鏄湪绋嬪簭鐨勬墽琛岃繃绋嬩腑鍙戠敓鐨勶紝鏄姩鎬佺殑...
  • 鐢佃剳windows杩涚▼閮借〃绀轰粈涔?
    绛旓細绠鍗曠殑璇,鍑℃槸鐢ㄤ簬瀹屾垚鎿嶄綔绯荤粺鐨勫悇绉嶅姛鑳鐨勮繘绋灏辨槸绯荤粺杩涚▼,瀹冧滑灏辨槸澶勪簬杩愯鐘舵佷笅鐨勬搷浣滅郴缁熸湰韬;鑰岀敤鎴疯繘绋嬪氨鏄敱鐢ㄦ埛鍚姩鐨勮繘绋嬨鍦╓indows涓,杩涚▼鍙堣缁嗗寲涓绾跨▼,涔熷氨鏄竴涓繘绋嬩笅鏈夊涓兘鐙珛杩愯鐨勬洿灏忕殑鍗曚綅銆傚拰绋嬪簭鎵涓嶅悓鐨勬槸,绋嬪簭鏄潤姝㈢殑,鑰岃繘绋嬫槸鍔ㄦ佺殑,鍦╓indows杩欐牱鐨勫浠诲姟鎿嶄綔绯荤粺涓,涓轰簡鍑嗙‘...
  • windows杩涚▼鍏ㄨВ
    绛旓細csrss 璐熻矗鎺у埗windows,鍒涘缓鎴栬呭垹闄绾跨▼鍜屼竴浜16浣嶇殑铏氭嫙MS-DOS鐜銆俥xplorer.exe杩欐槸涓涓敤鎴风殑shell(鎴戝疄鍦ㄦ槸涓嶇煡閬撴庝箞缈昏瘧shell),鍦ㄦ垜浠湅璧锋潵灏卞儚浠诲姟鏉,妗岄潰绛夌瓑銆傝繖涓繘绋嬪苟涓嶆槸鍍忎綘鎯宠薄鐨勯偅鏍锋槸浣滀负涓涓噸瑕鐨勮繘绋杩愯鍦╳indows涓,浣犲彲浠ヤ粠浠诲姟绠$悊鍣ㄤ腑鍋滄帀瀹,鎴栬呴噸鏂板惎鍔ㄣ傞氬父涓嶄細瀵圭郴缁熶骇鐢熶粈涔堣礋闈㈠奖鍝...
  • 涓轰粈涔堟湁鏃windows10杩涚▼鏆傚仠涓绾跨▼鏁颁负1
    绛旓細涓嶅吋瀹广1銆佽杞欢鐨勪唬鐮佹湁闂銆傚鑷磋繍琛屾椂鍑虹幇鑷村懡闂浼氳寮哄埗缁撴潫杩涚▼涓旀樉绀绾跨▼鏁颁负1銆2銆佽杞欢鍦╓in10绯荤粺涓嬩笉鍏煎銆備細鍑虹幇鎵撳紑鍚庡嚭鐜板紓甯告帀绾挎垨鐩存帴瀹屽叏鎵撲笉寮銆3銆乄in10绯荤粺鍒氬嚭涓嶄箙鍏煎鎬т笉瀹屽杽鐨勭郴缁熴傛病鏈夋洿鏂板畬鍠勮ˉ涓佸鑷淬4銆佺郴缁熶腑鏌愪釜绯荤粺鏂囦欢涓㈠け銆傝杩愯绋嬪簭鍑虹幇涓嶆甯告儏鍐碉紝涓庢煇涓...
  • 扩展阅读:免费成私人小影院品牌加盟 ... 日本插槽x8插槽怎么用图解 ... 1688精品货源网站入口 ... 2024永久免费access进销存 ... 免费的个人网站服务器 ... microsoft365永久免费 ... m3u8视频可以永久保存 ... x86国产cpu ... 免费的舆情网站入口有哪些 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网