多线程

来源:互联网 发布:双色球历史中奖数据库 编辑:程序博客网 时间:2024/06/06 12:45

进程:

进程通常被定义为一个正在运行的程序的实例

由两部分组成:

一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计

信息的地方。

另一个是地址空间,它包含所有可执行模块或D L L模块的代码和数据。它还包含动态内

存分配的空间。如线程堆栈和堆分配空间。

 

线程:

 

 

进程与线程关系:

并发的进程和并发的线程之间的区别是非常关键的。线程是在进程内执行的。在典型的情况下,一个进程需要他自己的地址空间,二同时执行的多线程则共享相同的地址空间,也就是他们所在的进程的地址空间。这就使得多个线程更容易访问内存中的相同数据。同时,线程切换所需要的时间也比进程切换的时间要短。另外线程间的通信比进程间的通信要快的多(线程的创建速度比进程的创建速度快10100倍)

 

线程状态

挂起:

睡眠:

等待:

退让:

终止:

线程并发:

锁:

 

多线程程序的运行

在一个多线程程序里,不同的线程可以有不同的优先级。但是这些优先级实际上如何发挥作用,在不同的系统中可能会有很大的差异。在普通情况下,具有最高优先级的线程被选择执行。一个具有当前最高优先级的线程将持续执行,知道出现一个具有更高优先级的线程。但是,在使用抢占式多任务系统中,线程被划分为许多时间片,这样每个线程都有可能被CPU选中。当线程划分为时间片时,具有相同优先级的线程轮流执行。处理相同优先级的线程的另一种方法是让一个线程运行直到结束为止,除非这个线程被另外一个寻求执行的具有更高优先级的线程抢占(称为优先级强抢占式多任务),或者由于一条sleep或者wait命令而暂时停止执行。

具有多线程能力的编程语言的效率最终依赖于线程如何映射到底层操作系统的本地线程中。这种映射关系在绝大多数情况下对于编写应用程序的程序员是隐藏的。对于一种编程语言而言,这种映射关系因编译器而异。以java为例,java虚拟机的有些实现采用了绿线程,他们都是操作系统的一个单一的本地线程中执行的。java虚拟机的其他一些实现可以直接使用本地线程,这就允许java的线程在多处理器计算机上并行执行。但是java虚拟机的另外一些实现有可能动态的把njava线程映射到m个本地线程中。在Linux中,每个java线程可能会映射到操作系统的一个独立的进程中。

原创粉丝点击