进程 与 线程

来源:互联网 发布:北京婚纱摄影口碑 知乎 编辑:程序博客网 时间:2024/06/04 01:34

1,进程:

一个程序运行的实例。线程的容器。进程是分配和拥有资源(地址空间的)最小单位。

 

2,进程

是进程中执行单元。线程是处理器调度的最下单位。进程中的线程共享进程的资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),

 

3,两者区别

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小。

 

补充:

******************************************************************************************************************

进程间通信方式

程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。

 

通信方式:

1)剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持

2)消息管道(Message Pipe)
       用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序访问一个平面文件一样读写数据。
  匿名管道(Anonymous Pipes):单向流动,并且只能够在同一电脑上的各个进程之间流动。
    命名管道(Named Pipes):双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格 式,而使用ReadFile()只能读取该大小的倍数。

3)Windows套接字(Windows Socket)
      它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应 用程序之间可以互相通信。

 

 

***********************************************************************************************************************

线程同步方式:

为什么要线程同步?

从之前的讨论及实际的项目中,可以看到线程同步给我们带来了很多便利性,但是多线程也同时给我们带来了很多麻烦:一方面,在开发调试阶段带来了很大的难度;另一方面,则需要考虑资源访问的一致性原则。因为在程序中使用多线程的时候,每一个线程并不会各行各事,每个线程之间必然会存在一些联系。如果两个或者多个线程访问同一个独占性的系统资源,这样会导致系统错误。

1) 临界区

临界区是一段独占对某些共享资源的访问代码,在任意时刻只允许一个线程对共享资源访问。如果有多个线程试图同时访问临界区,那么只有一个线程进入临界区,其他试图访问临界区的线程将被挂起,并一直持续到进入临界区的线程离开,其他线程可以继续抢占临界区。

需要说明的是,在使用临界区时,一般不允许其运行时间过长,因为只要进入临界区的线程不离开,其他视图进入此临界区的线程都会挂起,进入等待状态,因此这样在一定程度上影响程序的性能。因此,不要使临界区一直处于未释放的状态。

还需要注意的是,虽然临界区同步速度比较快,但是只能用来同步本进程内的线程,而不能跨线程同步。

2)事件

3)互斥量
4)信号量


 

原创粉丝点击