现在的位置: 首页 > 综合 > 正文

为何多线程就能提高Java程序的执行效率

2013年01月20日 ⁄ 综合 ⁄ 共 667字 ⁄ 字号 评论关闭

假设系统中目前有n个线程,系统通过一定的调度算法在不同的线程环境之间切换(为此线程必须要有一个上下文环境,一个调用栈来记录历史状态和当前状态)。每个线程往往获得一段运行时间(时间片)之后就被挂起,在适当的时机再被恢复继续运行。
现在假设所有的线程优先级是一样的,那么1s中一个单线程的进程获得的时间会是1/n s,如果现在再多加x个线程,那整个进程中的线程就变成x+1,而整个系统中的线程则变成x+n,则进程1s内获得的时间为(x+1)/(x+n),显然占用的时间片会比单线程的时候要多。

不过,不是多线程的进程时间片就一定更多的如果优先级与外部进程的其它纯种同样的话,那么,从数学角度来说,是更多的,因为,它要做的事更多了优先级不是想设置多高就设置多高的进程的权限控制WINDOWS优先级最高的线程是 任务管理器,其它线程的优先级,都低于它。

进程是操作系统分配资源的单位,而线程是独立运行的单位,一般进程由若干个线程组成,这些线程可以同时执行进程地址空间中的代码,而线程拥有自己独立的CPU堆栈和寄存器。一般单CPU操作系统以轮转方式向线程提供时间片,每个线程在使用完时间片后交出控制,系统再将CPU时间片分配给下一个线程。创建多线程的目的就是尽可能的利用CPU的时间片。CPU会根据线程的优先级来对线程进行调度,一般线程的优先级由两部分决定:本身在进程中的相对优先级和所属进程的优先级。
理论上一个进程内包含有多个线程的话,应该是会获得更多的时间片。但是当系统中的线程太多时,系统也会在线程的切换上花费掉不少时间,从而降低了系统的整体性能。

抱歉!评论已关闭.