java——》进程 && 线程

版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.csdn.net/weixin_43453386/article/details/88184422

多线程 就是指 一个进程 中同时有 多个执行路径(线程) 正在执行。


进程:指在操作系统中正在运行的一个应用程序。


线程:指进程内独立执行某个任务的一个单元。

一、概念

1、车间 && 进程

假定工厂的电力有限,一次只能供给一个车间使用。
假定CPU的能力有限,一次只能运行一个进程。

一个车间开工的时候,其他车间都必须停工。
CPU运行一个进程的时候,其他进程处于非运行状态。

2、工人 && 线程

一个车间,多个工人
一个进程,多个线程

3、车间的地理空间 && 进程的内存空间

车间的地理空间,多个工人,共享
进程的内存空间,多个线程,共享

4、一个车间最多容纳一人 && 一个进程里的内存最多让1个线程使用

一个车间最多容纳一人,里面有人的时候,其他人就不能进去了
一个进程里的内存最多让1个线程使用,当这个线程在使用的时候,其他线程必须等它结束,才能使用

1)、对策:在门口加一把锁

先到的人锁上门,
后到的人看到上锁,
就在门口排队,
等锁打开再进去。
这就叫"互斥锁",
防止多个线程同时读写某一块内存区域。

5、一个车间容纳n人 && 一个进程里的内存让n个线程使用

一个车间容纳n人,如果人数大于n,多出来的人只能在外面等着
一个进程里的内存让n个线程使用,如果线程数大于n,多出来的线程只能在外面等着

1)、对策:在门口挂n把钥匙

进去的人就取一把钥匙,
出来时再把钥匙挂回原处。
后到的人发现钥匙架空了,
就知道必须在门口排队等着了。
这种做法叫做"信号量"(Semaphore),
用来保证多个线程不会互相冲突。

二、系统设计

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

三、进程

1、进程特点

1)独立性

  • 独立拥有资源
  • 独立的地址空间
  • 没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间

2)动态性

  • 进程中有时间的概念
  • 进程具有自己的生命周期和各种不同的状态

3)并发性

多个进程可以在单个处理器上并发执行,互不影响。

并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时


并发:实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。

四、线程

1、线程特点

  • 线程和其它线程共享父进程的共享变量和部分环境,相互协作来完成任务。
  • 线程是独立运行的,其不知道进程中是否还有其他线程存在。
  • 线程的执行是抢占式的,也就是说,当前执行的线程随时可能被挂起,以便运行另一个线程。
  • 一个线程可以创建或撤销另一个线程,一个进程中的多个线程可以并发执行。

2、线程的4种状态

只有【可运行状态】与【阻塞状态】可以来回切换,其余的不可逆转

1)新生状态:调用start()方法前

2)可运行状态:调用start()方法后

系统为该线程分配除cpu外的所需资源,对于只有一个cpu的机器而言,任何时刻只能有一个处于可运行的线程占用处理机,获得cpu资源,此时系统正正运行线程的run()方法…

3)阻塞状态/不可运行状态

一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态,只在得到一个特定的事件后会转回可运行状态。

4)死亡状态

一个线程的run()运行完毕,stop()方法被调用或者在运行过程中出现了未捕获的异常时,线程进入死亡状态。

猜你喜欢

转载自blog.csdn.net/weixin_43453386/article/details/88184422