多线程并发编程(一)

在解决多线程并发带来的性能问题时,我们首先想到的一定是线程池。但配置线程池的几个关键参数时,必须基于生产环境系统资源以及线上流量,设置合理的参数值。线程数量设置太小,会导致程序不能充分地利用系统资源;线程数量设置太大,又可能带来资源的过度竞争,导致上下文切换造成额外的系统性能开销尤其线程数量设置过大,最糟糕的情况就是会导致系统奔溃。其中特别提到的“上线文切换”指什么呢,这里简单说明下,首先必须先说明下CPU时间片的概念。

 【CPU时间片】

以往在单个处理器的时期,操作系统已经能处理多线程并发任务。处理器给每个线程分配 CPU 时间片,线程在分配获得的时间片内执行各自的任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,通常为几十毫秒。在这么短的时间内发生线程切换,我们根本感知不到,所以给我们的感觉就是这些线程在同时进行。

 线程上下文切换

时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,那么这个时候,会有另外一个线程(可以是同一个线程或者其它进程的线程)就会被操作系统选中来占用处理器。这种一个线程被暂停剥夺使用权,另外一个线程被选中开始或者继续运行的过程就叫做上下文切换

 【协程

既然线程的上下文切换带来了额外的性能开销,那么就衍生出了协程这个思想来解决这个问题。协程和线程密切相关,简单来说,协程可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程又是一种轻量级资源,即使创建了上千个协程,对于系统来说也不是很大的负担,相反如果在程序中创建上千个线程,那系统可就真会面临奔溃的边缘了。因此协程的设计方式避免了因为系统资源的竞争,时间片的限制而导致的线程相互切换带来的性能损耗,从而极大地提高了线程的使用率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值