操作系统基础-进程与线程(6)

2018-12-19 16:02:57 george518 ...

一、线程程的概念

1、线程的引入

作为并发执行的进程具有二个基本的属性:进程既是一个拥有资源的独立单位,它可独立分配虚地址空间、主存和其它,又是一个可独立调度和分派的基本单位。这二个基本属性使进程成为并发执行的基本单位。

在一些OS中,像大多数UNIX系统等,进程同时具有这二个属性。而另一些OS中,象WindowsNT、Solaris、OS/2、Mac OS等,这二个属性由OS独立处理。

为了区分二个属性(独立分配资源和被调度分派任务) ,资源拥有单元称为进程(或任务),调度的单位称为线程、又称轻进程(light weight process)

线程只拥有一点在运行中必不可省的资源(程序计数器、一组寄存器和栈),但它可与同属一个进程的其它线程共享进程拥有的全部资源。线程定义为进程内一个执行单元或一个可调度实体。

2、线程的作用

线程的关键好处是从性能应用中得到的,在一个存在的进程中产生(或终止)一个线程比产生(或终止)一个进程化费少得多的时间。类似地,在同一进程内二个线程间切换时间也要比二个进程切换时间小得多。线程机制也增加了通讯的有效性。线程间通讯是在同一进程的地址空间内,共享主存和文件,所以非常简单,无需内核参与。因此假如一个应用或函数作为一组相关执行单元的应用,那么采用一组线程的集合比采用分开进程的集合要有效得多。

3、线程的分类
a、核心级(系统级)线程KLT(kernel-level thread)

依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。

b、用户级线程ULT(user-level thread)

不依赖于OS核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统informix,图形处理Aldus PageMaker。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。

总结:

进程拥有至少一个线程。
一个进程可以有多个线程,一个线程只能有一个进程,线程是系统调度的基本单位,进程是资源分配的基本单位。

多进程可以替代多线程(但是通信麻烦,因为多进程之间没有内存共享)。
比如文本输入工具,一边键入文字一边需要保存数据,如果是单进程执行,则每次输入都触发IO操作,非常费时,如果一个进程负责输入展示一个进程负责输入保存,确实速度很快,但是两个进程没办法共享数据。除非使用额外的通讯手段。

二、多线程

先比较一下进程(也可以叫单线程)结构和多线程结构


进程(单线程)


多线程


可以看出进程在并发程序设计上存在问题:

  • 进程切换开销大
  • 进程通信开销大
  • 限制了进程并发的粒度
  • 降低了并行计算的效率
    而多线程在并发程序设计上完全可以回避这些问题,并且多线程由于共享数据,也大大节省内存空间,使得并行成都提高。因此,大多数变成语言都会支持多线程模式。

参考:
https://blog.csdn.net/xiaokang123456kao/article/details/73773474
https://blog.csdn.net/a724888/article/details/80907506

相似文章