1.概念:
对象技术使你可以把程序划分成若干独立的部分,但还需要你把程序转换成彼此分离的,能单独运行的的子任务,每个独立的任务被成为一个“线程”。
进程: 一个独立运行着的程序,它有自己的地址空间。"多任务"操作系统通过周期性的将处理器切换到不同的任务。使其能够同时运行不止一个进程(程序)。每个进程都是连续的、一气呵成的。
线程:进程内部的单一控制流,一个进程可以具有多个并发执行流程。
多线程用途:通常用法是,你程序中某个部分与一个特定的事件或资源联系在了一起,而你不想让这种联系阻碍其余部分程序的运行,可以创建这个事件或资源相关的线程,让此线程独立与主线程运行。
2.动机:
比如你的程序有个方法执行时间特别长,然后后面的程序会等待这个方法执行完毕后,才有机会执行。这时候就需要多线程了。新起一个线程执行这个方法,执行这个方法的同时又把控制权交给程序其余的部分。就像处理器同时出现在2个地方。
1.并发还可以优化程序吞吐量。比如等待数据到达输入、输出端口的时候,你可以进行其他操作。如果不用线程,你要一直在监测输入、 输出端口,这样既笨拙又困难。
2.如果有一台多处理器机器,多线程就可以分布在不同的处理器上。极大提高吞吐量,这种情况多出现在多核web服务器上,对每个用户请求分配一个线程,把大量请求分配给不同的处理器来处理。
3.牢记:多线程的程序必须能在单处理器机器上运行,不使用任何线程写出同样功能的程序也是可以的,使用多线程使程序组织更有条理,大大简化程序设计。对于网络游戏没有并发支持将很难解决。
4.使用多线程,CPU将轮流给每个线程分配占用时间,多CPU例外,好处是代码不知道他是在单核还是多核CPU上,如果你程序运行的太慢添加一个CPU就很容易加快程序的运行速度,多任务和多线程往往是使用多处理器系统的合理方式。
5.单核CPU上,线程会降低运行效率,但从程序设计,资源平衡,用户使用方便看还是值得的,线程让你得到更加松散耦合的设计,否则你将不得不在部分代码中关注有线程处理的工作。
垃圾回收器只有在线程离开了run方法并死亡后才能把他清理掉,如果在main方法中你创建了一些线程对象,但是没有获取他的引用,对于普通对象会成为垃圾回收器回收目标,但是thread对象就不同了。因为每个thread对象要注册自己,所以实际上在某个地方存在着他的引用。
对象技术使你可以把程序划分成若干独立的部分,但还需要你把程序转换成彼此分离的,能单独运行的的子任务,每个独立的任务被成为一个“线程”。
进程: 一个独立运行着的程序,它有自己的地址空间。"多任务"操作系统通过周期性的将处理器切换到不同的任务。使其能够同时运行不止一个进程(程序)。每个进程都是连续的、一气呵成的。
线程:进程内部的单一控制流,一个进程可以具有多个并发执行流程。
多线程用途:通常用法是,你程序中某个部分与一个特定的事件或资源联系在了一起,而你不想让这种联系阻碍其余部分程序的运行,可以创建这个事件或资源相关的线程,让此线程独立与主线程运行。
2.动机:
比如你的程序有个方法执行时间特别长,然后后面的程序会等待这个方法执行完毕后,才有机会执行。这时候就需要多线程了。新起一个线程执行这个方法,执行这个方法的同时又把控制权交给程序其余的部分。就像处理器同时出现在2个地方。
1.并发还可以优化程序吞吐量。比如等待数据到达输入、输出端口的时候,你可以进行其他操作。如果不用线程,你要一直在监测输入、 输出端口,这样既笨拙又困难。
2.如果有一台多处理器机器,多线程就可以分布在不同的处理器上。极大提高吞吐量,这种情况多出现在多核web服务器上,对每个用户请求分配一个线程,把大量请求分配给不同的处理器来处理。
3.牢记:多线程的程序必须能在单处理器机器上运行,不使用任何线程写出同样功能的程序也是可以的,使用多线程使程序组织更有条理,大大简化程序设计。对于网络游戏没有并发支持将很难解决。
4.使用多线程,CPU将轮流给每个线程分配占用时间,多CPU例外,好处是代码不知道他是在单核还是多核CPU上,如果你程序运行的太慢添加一个CPU就很容易加快程序的运行速度,多任务和多线程往往是使用多处理器系统的合理方式。
5.单核CPU上,线程会降低运行效率,但从程序设计,资源平衡,用户使用方便看还是值得的,线程让你得到更加松散耦合的设计,否则你将不得不在部分代码中关注有线程处理的工作。
垃圾回收器只有在线程离开了run方法并死亡后才能把他清理掉,如果在main方法中你创建了一些线程对象,但是没有获取他的引用,对于普通对象会成为垃圾回收器回收目标,但是thread对象就不同了。因为每个thread对象要注册自己,所以实际上在某个地方存在着他的引用。