为什么要引入线程?

个人以为是为了提高CPU利用率。线程给操作系统带来的创建维护和管理负担要轻。因为与线程相关的信息比较少,交情的负担意味着线程的代价或开销比较少。当处理器除一个进程并激活另一个进程时,就要发生上下文切换。为了发生上下文切换,操作系统必须启动和重新启动每个进程所需的信息。这就意味着必须保存描述进程存在状态的有关信息,在进程再次激活时,就可以从离开的地点继续执行。那么系统在进程切换时需要保存那些信息呢?下面一一列举

1、所需信息包括可执行程序、堆栈、以及静态与动态分配变量内存的指针。

2、寄存器组中包含执行下一条指令的指针这样的信息 。

3、重新任命进程时需要进程的状态(进程是被挂起还是被阻塞)和优先权。同时程序的I/O状态也被保存。

4、保存进程的规划信息,内存管理信息以及计数信息。

5、进程需要文件描述器和读写指针来继续使用资源。

而线程同样需要上下文。当线程被抢先时同样也会发生上下文切换。

与进程相比线程的优势如下:

1、线程不需要地址空间。线程包含在进程的地址空间中。(所以在重新任命进程时所需的线程都不需要

2、线程的上下文只包含一个堆栈、一个寄存器组和一个优先权。

3、寄存器组包含程序或指令指针以及堆栈指针。

4、线程的文本包含在他的进程的文本中。

5、进程拥有的所有资源都属于线程。所以与资源相关的所有信息不是线程上下文的部分。

6、其他信息如规划、计数等都是由进程所定义。无需包含在线程的上下文中。

线程与进程的相同之处是:都有ID,寄存器组、状态、以及优先权。线程与子进程共享父进程的资源。

他们的不同之处是:

1、线程没有自己的地址空间,如果进程创建了多个所有的线程都将包含在他的地址空间中。

2、父进程和子进程之间必须通过进程间通信机制来进行通信。而进程中的多个线程之间是通过读取和写入数据到进程变量来通信。

3、子进程对其他子进程不施加控制,而进程的线程被看做同位体(peer)并对进程的其他的线程施加控制。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值