一个程序可以对应多个进程 如 记事本可以打开好多个
一个进程也可以同时访问多个程序
每个进程有独立的虚拟地址空间,不同进程内,即使使用相同内存地址实际也是不同的物理内存
进程由两部分组成
1 内核对象
2 地址空间 包含所有的可执行模块 或 DLL模块的代码和数据 还包含 栈(stack)和 堆(heap)
真正执行代码的是线程,进程只是线程的容器,一个进程可能有多个线程,第一个线程称为主线程,就是main函数
线程在进程中创建,在进程的地址空间中分配内存,供线程的栈使用.,线程可以访问进程内核对象的所有句柄.
单个进程中的多个线程之间非常容易通信
线程内存开销比进程少,因此多采用线程,避免新进程
操作系统为每一个线程安排一定的CPU时间--时间片.每个线程在自己的时间内运行,因为时间片非常短,就好像多个线程同时运行一样
如果计算机拥有多个CPU,线程就真正意义上同时运行了
//简单举例======================================================================================
#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
DWORD WINAPI m_fun1Proc(LPVOID lpParameter);
void main()
{
cout<<"main thread is running"<<endl;
HANDLE hThread1;
hThread1=::CreateThread(NULL,0,m_fun1Proc,NULL,0,NULL);
for(char i='A';i<10+'A';i++)
{
cout<<i<<endl;
::Sleep(1000);
}
::CloseHandle(hThread1);
::_getch();
}
DWORD WINAPI m_fun1Proc(LPVOID lpParameter)
{
cout<<"thread1 is running"<<endl;
while(1)
{
static int x=0;
x++;
cout<<x<<endl;
::Sleep(1000);
}
return 0;
}