进程、线程基本知识
进程
在计算机操作系统中,进程是指当可执行文件运行时,系统所创建的内核对象。进程是系统进行资源分配和调度的基本单位,是操作系统的基础。进程有以下几个特征:动态性、并发性、独立性 、异步性。
进程运行中可能具有的三个状态:
就绪状态:通俗的说就是只要拿到处理器资源就可以执行
运行状态:占用处理器资源
阻塞状态:就算是拿到处理器资源也不可以执行,需要等到条件慢足才能执行
注:有关进程的详细资料可访问百度百科,里面有详细的解说。
多线程
线程是程序执行流的最小单元,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
线程具有以下属性:
1)轻型实体
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。
2)独立调度和分派的基本单位。
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。
3)可并发执行
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。
4)共享进程资源
在同一进程中的各个线程,都可以共享该进程所拥有的资源,表明线程都具有相同的地址空间。
线程的创建:
DWORD WINAPI myfun(LPVOID lpParamenter); //声明线程函数 ....... HANDLE h; //定义句柄对象 h=::CreateTHread(NULL,0,myfun,NULL,0,NULL); //创建线程
.......
::CloseHandle(h); //关闭线程对象句柄
CreateTHread()的原形如下:
HANDLE CreateTHread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//表示新建程序的安全属性,NULL:使用默认属性 DWORD dwStackSize, //初始化地址空间大小,0:线程的地址空间大小与调用该函数的线程地址空间大小一样 LPTHREAD_START-ROUTINE lpStartAddress, //指定该线程的线程函数的地址 LPVOID lpParameter, //将要传递给新建线程的命令行参数 DWORD dwCreationFlags, //新建线程是否立即运行,0:立即运行;CREATE_SUSPENDED:暂停运行 LPDWORD lpThreadId, //新建线程的ID号,可设置为NULL );
线程和进程的区别:
可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。
4)在多线程OS中,进程不是一个可执行的实体。