进程、线程基本知识

进程

在计算机操作系统中,进程是指当可执行文件运行时,系统所创建的内核对象。进程是系统进行资源分配和调度的基本单位,是操作系统的基础。进程有以下几个特征:动态性、并发性、独立性 、异步性。

进程运行中可能具有的三个状态:

    就绪状态:通俗的说就是只要拿到处理器资源就可以执行

    运行状态:占用处理器资源

    阻塞状态:就算是拿到处理器资源也不可以执行,需要等到条件慢足才能执行

注:有关进程的详细资料可访问百度百科,里面有详细的解说。

多线程

     线程是程序执行流的最小单元,一个标准的线程由线程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中,进程不是一个可执行的实体。

posted @ 2017-12-14 16:07  影-辰  阅读(166)  评论(0编辑  收藏  举报