进程和线程的关系

进程和线程的关系

1.并行与并发
(1) 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
(2) 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景 中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS(每秒钟处理的事务数)或者 QPS(每秒钟处理的请求数)来反应这个系统的处理能力。

2.主线程
线程是进程中的一个实体,用来描述进程的执行,它负责执行包括在进程的地址空间中的代码。
创建一个进程时,它的第一个线程称为主线程,它由系统自动生成
(1)它是产生其他子线程的线程 ;
(2)通常它是最后完成执行,因为它执行各种关闭动作。注意这里不绝对.

public class Test{
 public static void main(String[] args){
  Thread t1=new Thread(){//定义子线程,是主线程启动的线程,是主线程的子线程
   public void run(){ 
   //Thread.currentThread()获取当前正在运行的线程对象 
   //.getName()获取线程对象的标识名称 
   System.out.println(Thread.currentThread().getName());
    } 
    };
  t1.start(); //启动子线程
   System.out.println(Thread.currentThread().getName()); 
   }
 }

进程中线程之间的关系
线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影 响另外一个。但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(…))。main执行完 之后 会调用exit()。exit会让整个进程over终止,那所有线程自然都会退出。

3.进程和线程的关系
1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(主线程)。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3、线程在执行过程中需要协作同步。
4、CPU分给线程,即真正在处理机上运行的是线程。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体,两者都是动态的概念。

4.线程和进程的区别
(1) 调度:线程是CPU调度和分配的基本单位,进程是系统资源分配和调度的基本单位。
(2) 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行,一个进程至少有一个线 程(单进程单线程),一个线程必须隶属于某个进程。
(3) 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
进程和线程最大的区别在于:进程是由操作系统来控制的,而线程是由进程来控制的。
线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。

5.多线程
多线程方式是指在一个程序中存在多个线程,每一个线程执行一个独立的任务,多个线程可以并发执行
(1) 在Java中,一个应用程序可以包含多个线程,每个线程执行特定的任务,并可与其他线程并发执行 ;
(2)多线程使系统的空转时间最少,提高CPU利用率,多线程编程环境用方便的模型隐藏CPU在任务间切换的细节 .
吞吐量,充分利用cpu资源,减少CPU空转时间。
伸缩性,通过CPU核数来提升性能。
在许多情况中可以显式地使用线程以提高程序的性能、响应速度或组织。要用到多线程的主要是需要处理大量的IO 操作时或处理的情况需要花大量的时间等等,比如:读写文件、视频图像的采集、处理、显示、保存等。

线程的工作场景主要有两条:
1、并发操作,避免阻塞和更有效利用资源。典型的例子有:在长时间工作的程序中使用工作线程避免界面失去响 应。在网络下载程序中,使用多个线程提高对网络的使用效率,更快下载文件。
2、并行,线程是处理器调度的最小单位。如果你的计算机配置了多个处理器或者内核,那么可以同时利用多个处 理器同时计算,加快问题解决的速度。

多线程机制会提高程序的运行效率吗?
不一定,如果针对密集型计算的应用使用单线程避免多线程中的切换反而会提高代码的运行效率。
资源限制的挑战,在并发编程时需要考虑到资源上的限制。如果受制于资源,整体程序的速度肯定会慢下 来。

解决的方法有以下几点:
(1)对于硬件资源的限制,可以使用集群来跑。
(2)对于软件资源上的限制,可以复用资源,比如复用数据库连接
(3)根据资源的限制,灵活的去调整并发度。
基于线程的多任务处理的优点
基于线程所需的开销更少
(1)在多任务中,各个进程需要分配它们自己独立的地址空间
(2)多个线程可共享相同的地址空间并且共同分享同一个进程
进程间调用涉及的开销比线程间通信多
线程间的切换成本比进程间切换成本低
基于多线程编程的缺点
设计更复杂、上下文切换的开销、增加资源消耗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值