线程和进程的基础

一. 什么叫进程和线程
(1)什么叫进程
进程是系统资源分配和调度的基本单位。
(2)什么叫线程
线程是进程的一个实体,线程本身不会独立存在。线程是CPU分配的基本单位。

二. 进程间如何通讯?线程间如何通讯?
(1)进程间如何通讯?
进程和进程通信(指不同进程之间进行传播或交换信息),是依靠IPC资源进行通信的。例如:管道、Socket、消息队列、信号量、共享存储和Streams等。
(2)线程间如何通讯?
线程和线程通信,是依靠JVM提供的API进行通信。
例如:
(a)通过共享变量来实现通信(通过wait、notify、notifyAll函数实现共享变量的通信);
(b)通过队列共享内存来实现消费者和生产者的模式来进行通信。

三. 进程和线程的区别
除了上述(1)(2)的区别之外,还有:
线程上下文切换比进程上下文切换要快得多。主要以下两点:
(a)进程切换时,涉及到当前进程的 CPU 环境的保存和新被调度运行进程的 CPU 环境的设置。
(b)线程切换仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。
参考资料https://www.cnblogs.com/feiyumo/p/9168264.html
备注:上下文切换的概念
上下文切换:为了让用户感觉多个线程是在同时执行,CPU资源的分配采用了时间片轮转的策略,也就是给每一个线程分配一个时间片,线程在时间片内占用执行任务。当线程使用完时间片之后,就会处于就绪状态并让出CPU让其它线程使用,这就是上下文切换。
注意:上下文切换容易导致死锁。

四.多线程
(1)多线程是如何工作?
线程是占用CPU执行的基本单位,而CPU一般是使用时间片轮转方式让线程轮询占用的,所以当前线程CPU时间片占用完之后,要让出CPU,等待下次轮到自己的时候再执行。
**引出问题:**线程如何知道之前的程序执行到哪里了,自己如何接着执行程序?
**解决方案:**每个线程都有自己的一个程序计数器和栈区域。
(a)程序计数器是一块内存区域,用来记录线程让出CPU时的执行地址,因此,当该线程再次被分配到时间片的时候,它会从自己私有的计数器取出上次让出CPU时的地址,继续执行。
(b)栈区域:每个线程都有自己的栈资源,用来存放该线程私有的局部变量,此外,还存放该线程的调用栈帧。

五.多线程和单线程的区别和联系
(1)在单核CPU中,将CPU分为很小的时间片,在每一时间片内只能有一个线程在执行。
(2)由于多线程存在上下文切换,因此,多行线程执行的速度会变慢。

猜你喜欢

转载自blog.csdn.net/weixin_42631192/article/details/84986027
今日推荐