多线程与单线程理解
进程与线程的关系
进程是计算机程序执行一次过程的接班单位,即正在执行的程序(QQ),一个应用程序可以包含多个进程(QQ的不同页面信息)
线程是进程的基本单元,一个进程至少包含一个线程,线程也是程序到CPU执行的通路,而进程则会为应用程序分配内存空间,在一个内存空间中进行处理,效率也会更高,如果是单线程,则电脑在处理一个应用程序中的多个指令时,会并发调用CPU(即每个时间片段分配给不同的线程,只是由于执行时间很短,切换时间也很短,因此没有察觉),线程属于进程,是程序执行的执行单元,而进程是一个应用程序,内部含有多条线程指令。
多线程与单线程
多线程与单线程在单核CPU或者多核CPU中均可以进行执行,只是单核CPU中多线程是一种假的多线程,他也可以独立同时处理多条指令,只是不像多核cpu那样,会对多条指令并行处理,单核CPU通过并发的形式,对多线程进行处理。
而多核CPU才能真正发挥多线程的作用。
线程调度
分时调度
所有线程轮流使用CPU,平均分配每个线程的CPU占用时间
抢占式调度
可以通过对线程的优先级进行设置,分配不同线程抢夺CPU的优先级
多线程的优点
1.对于单核CPU而言,由于采用多线程的方式,CPU会采用并发的方式进行处理指令,而这种方式相比于单线程会更加耗时(由于CPU在不同线程之间的切换会有时间的损耗)。
2.多线程可以提高应用程序的响应,使得多条指令可以更好地执行,特别是对图像化界面,内部含有多种图形化原件(多种指令集),因此可以增强用户体验
3.对于多线程,可以提高计算机系统的利用率,现服务器基本都为多核CPU
4.可以改善程序的结构,例如,JAVA程序的运行,会分为主线程,垃圾回收机制,异常处理,通过多线程的方式使得每个部分独立运行,有助于程序的更改和理解
5.多线程可以分别设置优先级以优化性能。
多线程的缺点
1.由于多线程分为多个指令处理,因此复杂度会增加
2.每个线程都需要分配自身的栈,栈就是包含变量值和其他执行信息的存储区。除了栈之外,线程还要使用其他系统资源,但不同JVM中所用的资源数量和类型也各不相同。虽然有时需要创建大量的线程,但所用平台可能会限制创建线程的数量。即使所有平台没有显式限制所能创建的线程数量,但一般根据处理器速度和系统可用内存也会有所限制。