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;
}

  • 运行结果
    C++演示进程和线程在创建和使用方面的巨大区别《C++多线程编程实战》