概述
在多处理器系统中,多个线程在不同的内核上同时执行。
例如,如果有两个线程和两个内核,则每个线程将在单个内核上运行。在单处理器系统中,多个线程执行一个接一个的执行,或者等到一个线程完成或被操作系统抢占,这取决于线程的优先级和操作系统策略。但是正在运行的线程给人一种错觉,认为它们可以同时运行,相对于用户空间应用程序所需的应用程序响应时间。
时间比较(示例):
如果两个线程各自花费10us执行,那么在2处理器系统上,净时间为10us
如果两个线程各自花费10us执行,那么在1个处理器系统上,净时间为20us
问题
由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。
时间片
多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务正在同时进行呢? 操作系统的设计者 巧妙地利用了时间片轮转的方式
时间片是CPU分配给各个任务(线程)的时间!
“思考:单核CPU为何也支持多线程呢?
”
线程上下文是指某一时间点 CPU 寄存器和程序计数器的内容,CPU通过时间片分配算法来循环执行任务(线程),因为时间片非常短,所以CPU通过不停地切换线程执行。
换言之,单CPU这么频繁,多核CPU一定程度上可以减少上下文切换。
总结
1.(单核CPU)同一时间,cpu只能处理1个线程,只有1个线程在执行
2.多线程同时执行:是CPU快速的在多个线程之间的切换
3.cpu调度线程的时间足够快,就造成了多线程的“同时”执行
4.如果线程数非常多,cpu会在n个线程之间切换,消耗大量的cpu资源
5.每个线程被调度的次数会降低,线程的执行效率降低
建议
合理设置线程数目既可以最大化利用CPU,又可以减少线程切换的开销。
高并发,低耗时的情况,建议少线程。
低并发,高耗时的情况:建议多线程。
高并发高耗时,要分析任务类型、增加排队、加大线程数