线程和进程的学习
来源:互联网 发布:天津保姆价格知乎 编辑:程序博客网 时间:2024/05/22 15:25
引入线程带来的主要好处:
(1) 在进程内创建、终止线程比创建、终止进程要快;
(2) 同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1.3 优缺点:
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
根本区别就一点:用多进程每个进程有自己的地址空间,线程则共享地址空间。所有其他的区别由此而来:
1.速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内
2.资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内
3.同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
1.速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内
2.资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内
3.同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
线程的优缺点
优点:
占用较少的系统资源
共享数据容易,改善程序结构
提高应用程序响应速度
使用多处理器效率更高
缺点
内存共享会导致互相干扰
一个线程崩溃会导致整个进程崩溃
优点:
占用较少的系统资源
共享数据容易,改善程序结构
提高应用程序响应速度
使用多处理器效率更高
缺点
内存共享会导致互相干扰
一个线程崩溃会导致整个进程崩溃
线程同步相关
线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。
当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。
线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。
线程同步的方法
(1)wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
(2)sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException异常。
(3)notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的
唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
(4)notityAll ():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,
而是让它们竞争
当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。
线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。
线程同步的方法
(1)wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
(2)sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException异常。
(3)notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的
唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
(4)notityAll ():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,
而是让它们竞争
0 0
- 线程和进程的学习
- 线程和进程的学习
- 线程和进程的学习(上)
- C#中进程和线程的学习
- 线程和进程的学习(8.25)
- java进程和线程学习
- Python学习----进程和线程
- python进程和线程学习
- 进程和线程学习理解
- 学习笔记——进程和线程的区别
- 进程和线程的学习小结(一)
- Windows核心编程学习笔记--进程和线程的优先级
- VC++学习之进程和线程的区别
- 关于学习进程控制和线程控制的小结
- 进程和线程的区别(仅用于学习记录)
- java学习初探十八之线程和进程的区别
- 进程和线程的区别
- MFC的进程和线程
- android 之Intent的使用
- socket通信的环形缓冲
- 阵列卡与raid5(HP D380 G7 、DELL R720XD)
- Activity泄露发现与诊断
- 最近想看的书,先保存下来,以后慢慢看
- 线程和进程的学习
- 新手学习编程的最佳方式是什么?
- php max_execution_time执行时间问题
- 利用Axis发布WebService
- 按行政区域范围下载并裁剪卫星地图数据教程
- CentOS+Nginx+PHP+MySQL详细配置(图解)
- 剖腹产十个错误认识
- git pull更新错误解决办法
- Java线程池