linux中建立程序是直接的,就是簡單的一個fork調用,linux認為程序就是執行的一個任務,并沒有和可執行檔案聯系起來,如果非要和可執行檔案 聯系的話就要涉及到另一個系統調用exec.linux這麼實作取得了很大的靈活性,這個靈活性實際上也是繼承unix的,因為unix就是這樣實作程序的,程序在unix或者類unix比如linux系統中就是一個執行續,而不是别的什麼特殊的東西,這使得在這些系統中很容易就實作了線程的概念,而且可 以用統一的管理系統去管理線程或者程序,所不同的僅僅是程序擁有另外一些東西而線程卻沒有,線程成了程序的完全子集,這在設計上是很重要的.相 反,windows核心雖然完全實作了線程,但是它實作的線程卻和程序的概念是完全分離的,唯一的相同點就是都是nt執行體的"可執行"對象,統一于對象 管理器,繼承了可執行對象的一切特性.這樣windows實作的現代程序和線程的概念就相當松散,不利于統一管理,這完全展現在使用者接口上,我們看一下 windows的程序建立接口;
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
這 裡僅僅給出接口聲明和簡單的解釋,更詳細的請查閱MSDN,第一個參數是可執行子產品的名稱字元串,第二個是指令行,...就不多說了,看得暈嗎?我是不喜 歡這種方式了,為什麼程序一定要有可執行子產品?去問微軟吧!這也可能是微軟的政策,故意讓你進入他自己的開發模式,然後上瘾然後你就離不開微軟了...; 再看一眼它的線程建立接口:
HANDLE CreateThread(
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
LPDWORD lpThreadId
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273438