线程优缺点---线程 vs 进程

个人主页:Lei宝啊 

愿所有美好如期而遇


线程优点

创建一个新线程的代价要比创建一个新进程小得多

这个好理解,创建进程,需要创建task_struct,创建虚拟地址空间,还有页表,建立映射关系等等,而创建线程仅仅只需要创建一个task_struct。

与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多

进程的切换,在我们看来,就是切换硬件的上下文数据,线程也有他自己的上下文数据需要维护,线程的切换,也就是切换他的硬件上下文数据,但对于CPU上的寄存器来说,无非也就多了那么几次交互,线程切换似乎并没有比进程切换效率高多少?

其实差距就在cache上,CPU中有一个硬件叫做cache,也就是缓存,他在执行一个指令的时候,会认为你大概率也会执行下一行指令,也就会一次性将一批数据从物理内存中读取到cache中,下次执行指令时就从cache中拿就行。

进程切换,cache中的数据也就没用了,新切换的进程数据,仍然要重新加载进cache中。而线程不同,因为共享一个虚拟地址空间,读取在cache中的数据大概率上在进程切换后仍然可以使用,就无需丢弃这批数据,效率也就高了。

  • 线程占用的资源要比进程少很多
  • 能充分利用多处理器的可并行数量
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作

 剩下这五个优点我们不做详细介绍。

线程缺点


性能损失
一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。

健壮性降低
编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

缺乏访问控制
进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。

编程难度提高
编写与调试一个多线程程序比单线程程序困难得多。

线程 vs 进程

进程是分配资源的基本实体,线程是调度的基本单位。

即使线程共享进程数据,但也有自己的一部分数据:

  • 线程的硬件上下文数据(调度)
  • 线程的独立栈(常规运行)
  • 线程id
  • 信号屏蔽字
  • 线程优先级

如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:

  • 文件描述符表
  • 每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)
  • 当前工作目录
  • 用户id和组id 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
进程线程都是计算机中的并发执行模型,它们的最大区别在于进程是操作系统资源分配的基本单位,而线程是程序执行的基本单位。下面是它们的优缺点和使用场景: 进程的优点: 1. 进程之间互相隔离,相互之间不会影响; 2. 进程之间共享数据简单,可以使用IPC机制进行通信; 3. 进程可以利用多核CPU进行并发执行; 4. 进程崩溃不会影响其它进程进程的缺点: 1. 进程创建、切换和销毁的开销比较大; 2. 进程之间的通信比较耗时; 3. 操作系统需要为每个进程分配独立的内存空间,占用较多的内存资源。 线程的优点: 1. 线程创建、切换和销毁的开销比进程小很多; 2. 线程之间的通信比进程之间的通信更加快速和简便; 3. 多线程可以充分利用CPU的多核特性,提高程序的并发执行能力; 4. 线程之间共享内存,数据共享简单。 线程的缺点: 1. 线程之间没有隔离,一个线程崩溃可能会影响整个程序; 2. 线程之间的共享数据容易引起数据竞争; 3. 线程的数量过多会影响程序的性能。 使用场景: 一般来说,进程适用于需要隔离的场景,比如操作系统的进程管理、Web服务器的多进程模型等;线程适用于需要并发、数据共享的场景,比如图形界面程序、网络服务器的多线程模型等。在实际应用中,根据具体的需求和应用场景来选择合适的并发执行模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值