Java 给多线程编程提供了内置的支持,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程执行不同的任务。
、进程和线程
进程是指一个内存中运行中的程序,每个进程都有自己独立的一块内存空间,一个应用程序可以同时启动多个进程,比如在windows系统中,一个运行的abc.exe就是一个进程。那么久可以处理同时玩游戏和听音乐的问题了,可以设计成两个程序,一个专门负责玩游戏,一个专门负责听音乐。
那么问题来了,要是设计一个植物大战僵尸的游戏, 我得开N个进程才能完成多个功能,这样的设计显然是不合理的,更何况大多数操作系统都不需要一个进程访问其他进程的内存空间,也就是说进程之间的通信很不方便,此时我们得引入“线程”这门技术,来解决这个问题。
线程是指进程中的一个执行任务(控制单元),一个进程可以同时并发运行多个线程,如:多线程下载软件,多任务系统,该系统可以运行多个进程,一个进程也可以执行多个任务,一个进程可以包括多个线程。一个进程至少有一个线程,为了提高效率,可以在一个进程中开启多个执行任务,即多线程。
线程和进程的区别
进程:有独立的内存空间,进程中的数据存放空间是独立的,至少有一个线程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间可以影响的,又称之为轻型进程或进程元。
因为一个 进程中的多个线程是并发运行的,那么从微观角度上考虑也是有先后顺序的,那么哪个线程执行完全取决于CPU调度器(JVM来调度),程序员是控制不了的。
我们可以把多线程的并发性看作是多个线程在瞬间抢CPU资源,谁抢到资源谁就运行,这也造就了多线程的随机性。
java程序的进程(java的一个程序运行在系统中)里至少包括主线程和垃圾回收线程(后台线程)。
多进程:操作系统中同时运行的多个程序。
多线程:在同一个进程中同时运行的多个任务。
可以看一下Windows环境下的任务管理器,在操作系统中允许多个任务,每一个任务就是一个进程,,每一个进程也是可以同时执行多个任务,每一个任务就是线程。
多线程的优势:
1、进程之间不能共享内存,而线程之间可以共享内存。
2、系统创建进程时需要为该进程重新分配系统资源,创建线程则代价小得多,因此实现多任务并发是,多线程效率更高。
3、java语言本身内置多线程功能的支持,而不是单纯的作为底层系统的调度方式,从而简化了多线程编程。
例子:cs游戏、单行道和多行道
多线程下载:可以理解为一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道。当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配,。不难理解,如果你线程多的话,那下载的越快,现流行的下载软件都支持多线程。
多线程是为了同步完成多项任务的,不是为了提高程序的运行效率,而是通过提高资源使用效率来提高系统的效率。所以大家买电脑的时候,也应该看看CPU的线程数。
宽带是以位(bit)计算,而下载速度是以字节(Byte)计算的,1字节(Byte)等于8位(bit),所以1024kb/s是代表上网带宽为1024千位(1M),而下载速度需要1024千位/秒(1024kb/s)带宽除以8,得出128千字节/秒(128KB/s)。
线程调度:计算机通常只有CPU时,在任意时刻只能执行一条计算机指令,每一个进程只有获得CPU的使用权才能执行指令,所谓多进其实程并发运行,其实就是各个进程轮流获得CPU的使用权,分别执行各自的任务。那么,在可运行池中,会有多个线程处于就绪状态等到CPU,JVM就负责了线程的调度。JVM采用的是抢占式调度,,没有采用分时调度,因此可以能造成多线程执行结果的随机性。
网友评论