浅谈线程模型

基本概念

什么是线程?
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,
即不同的线程可以执行同样的函数。

什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,
也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
这样就大大提高了程序的效率。

多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug;

不同线程模型的适用场景

单线程单队列
可用作同步线程,将并发任务但是需要同步执行的任务投递到同步线程的任务队列中,可避免加锁的开销,CPU使用率最低,若不是无界队列则其内存使用率也比较低。

多线程单队列
可用作一般任务的处理线程,CPU利用率高于单线程单队列,但是会有同步加锁的性能开销。

多线程多队列
可用作IO线程,在读取IO数据时可将读取数据的任务根据不同的策略投递到不同队列中,最大化利用机器的CPU和内存资源。多线程多队列不适用于处理耗时不确定的任务,原因是任务在投递选择队列时,可能出现投递的队列对应的线程一直在阻塞,而其它队列的线程却是空闲的。

举个例子:任务的投递策略是选择任务数最少的队列优先投递,但有可能该任务队列中已有的任务处理耗时比较长,导致该任务对列的线程一直被占用,其它队列虽然任务数比较多,但是处理耗时都比较短,很快将队列中的任务处理完了。这就会导致任务被阻塞了,但是线程又没有被充分利用起来的现象。

总结
不同的线程模型有其各自的优缺点,在工作中需要根据具体的业务场景而来。单线程与多线程的区别参考链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值