多线程初识

1.什么是线程?进程?
线程:进程是操作系统资源分配的单位 例:I/O资源,内存资源…
进程:线程是资源调度的单位,真正执行的指令 例:操作数据的执行流
(注意!线程属于进程)

2.线程与进程之间的关系
1.创建进程会给分配相应的内存空间,线程创建则不会给分配内存空间
2.一个进程可以包含多个线程,一个线程只隶属于一个进程,一对多的关系
3.进程与进程是相互独立隔离的,若一个进程崩溃,不会影响到其他的进程的;线程是隶属于进程,线程在进程间可以共享空间,一个线程的崩溃可能会影响达到其他线程正常执行

3.线程和进程的重要区别:
1、简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2、线程的划分尺度小于进程,使得多线程程序的并发性高。
3、另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4、线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5、从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

4.多线程的优势和劣势?
优势:资源利用率更高,程序响应更快
劣势:增加线程间切换的开销,有时会出现线程的死锁,设计更为复杂

5.多线程的原理:
在这里插入图片描述
6.线程的并发和并行
● 并行:需要多个CPU,多个工作可以同时进行,不同的CPU执行不同的工作(相当于两个单核处理器,处理两个任务)
● 并发:两个工作使用一个CPU,CPU会快速的进行切换执行,好像是两个工作在同时运行(相当于一个QQ号给两个好友发消息,只能一个发完再发另一个)

7.Java中的内存模型
在这里插入图片描述
8.Java线程与操作系统之间的关系
Java中创建的进程和线程最终会映射到本地操作系统的进程、线程模型上
在这里插入图片描述
● windows的进程线程模型和Linux的进程线程模型不一致。
● Linux下运行Java程序 -->javac java
● 进程和线程最终都会映射到内核空间,内核空间都会创建PCB(内)
● Java/C/php =>高级语言 ——>编译——>汇编——>JVM
● 汇编语言:==>数据、指令
eg:int a = 10; a是存储10的地址(0x984ac)别名
虚拟地址,虚拟地址空间(虚拟地址空间和虚拟地址不一样)

以Linux 32位操作系统为例,2^32 = 4G
1.Linux系统创建线程会分配内存空间大小为4G(虚拟地址空间)
2.内核中,进程和线程都有独立的PCB,进程是具有独立的用户空间
3.虚拟地址–物理地址—>多级页表映射
4.虚拟地址空间、地址映射、进程转换以及进程调度
在这里插入图片描述
9.进程间的通信方式
1.管道通信(大)、消息队列、信号量(小) (只是数据大小的问题)
在内核空间开辟出一块内存来,你写了我能看见,我写了你也能看见
进程不在一个地址空间中,所以通信复杂。共享内核空间,同一个进程的所有线程都在一个地址空间中,共享堆和数据段,通信非常方便
2.共享内存
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值