C++演示进程和线程在创建和使用方面的巨大区别《C++多线程编程实战》
- 进程必须要从磁盘加载一个文件.
进程是完整的实体.真正需要的时候才使用进程
创建进程要使用许多系统资源
还有其它例如守护进程(daemon),监听器(服务器)等 - 线程比进程快得多,开支也小得多.
创建进程不用从磁盘加载,只要提供StartAddress指针就可以
进行小型的并发操作,绝大多数情况下都应该选择线程
- 进程很贪婪,想占用所有的资源. 进程的地址是私有的
- 线程执行速度比进程快.优点是所有的进程资源都属于共同的地址空间.大幅减少了从RAM转移至CPU的系统开销.句柄,指针和对象都可以使用这些资源
演示进程和线程在创建和使用方面的巨大区别
有2个项目
控制台项目一:tmpThread
- tmpThread.cpp
#include <windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
DWORD WINAPI StartAddress(LPVOID lpParameter)
{
cout << "Hello. I am a very simple thread."
<< endl
<< "I am used to demonstrate thread creation."
<< endl;
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//创建线程. 注意, 我们只需在相同的代码段中定义StartAddress例程即可
//因为主函数负责开始线程和执行并发操作
HANDLE hThread = CreateThread(NULL, 0, StartAddress, NULL, 0, NULL);
//创建进程. 注意CreateProcess的第一个参数, 它指向要从磁盘加载的文件
STARTUPINFO startupInfo = { 0 };
PROCESS_INFORMATION processInformation = { 0 };
#ifdef _DEBUG
BOOL bSuccess = CreateProcess(
TEXT("..//Debug//tmpProcess.exe"), NULL, NULL,
NULL, FALSE, 0, NULL, NULL, &startupInfo,
&processInformation);
#else
BOOL bSuccess = CreateProcess(
TEXT("..//Release//tmpProcess.exe"), NULL, NULL,
NULL, FALSE, 0, NULL, NULL, &startupInfo,
&processInformation);
#endif
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return system("pause");
}
控制台项目2:tmpProcess
打开[解决方案资源管理器] . 在 tmpThread 项目上单击右键, 选择[项目依赖项],在下拉菜单中选择 tmpThread,然后选择下面的 tmpProcess 项目
- tmpProcess.cpp
#include <tchar.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "Hello.I am a very simple process."
<< std::endl
<< "I am used to demonstrate process creation."
<< std::endl;
return 0;
}
- 运行结果