【编程优化】单线程、多线程基础(更新中)
来源:互联网 发布:网络小贷清理整顿会议 编辑:程序博客网 时间:2024/06/05 14:15
一、基础知识
主频:CPU内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度
外频:系统基本时间
主频 = 外频 * 倍频
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有
系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享
进程所拥有的全部资源,一个线程可创建和撤销另一个线程,同一个进程中的多个线程之间可并发执行。
二、入门
多线程编程目的:最大限度地利用CPU资源。在一个进程内有多个线程,使一个应用程序有了多任务功能。每个进程都有独立的数据和代码空间。
单个CPU,在未开启超线程情况下,在同一时间只能执行一个线程,增加多任务只能通过每个进程或线程获得一个时间片,在某个时间片内只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片
很短,给用户的感觉同时有好多线程在执行,但是线程切换是有代价的,如果采用多进程,那就需要将线程所属该进程所需要的内存进行切换,这时间代价很大,但线程切换代价就很少,线程可以
共享内存,所以采用多线程在切换上花费比多进程少的多,但是线程切换还是需要时间消耗,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即
采用多线程不会提高程序的执行速度,反而会降低速度,但对于用户来说可以减少用户的响应时间。
多个CPU或CPU采用超线程技术,采用多线程技术会提高程序的执行速度,因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。
三、区别与联系
从逻辑角度来看,多线程意义在于一个应用程序中,有多个执行部分可同时执行,但操作系统并没有将多个线程看作多个独立的应用,来实现进程的
调度和管理以及资源分配,这是进程和线程的重要区别。
·进程与程序区别与联系
(1)程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态的实体。而进程不同,它是程序在某个数据集上的执行,
是一个动态的实体,它有自己的生命周期,它因创建而产生,因调度而运行,因等待资源或时间而被处于等待状态,因完成任务而被撤销,
反映了一个程序在一定的数据集上运行的全部动态过程。
(2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程,而这一点正是
程序无法做到的,由于程序没有和数据产生直接的联系,即使是执行不同的数据程序,他们指令集合依然是一样的,所以无法唯一地标识出这些运行
于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个,而一个程序可能没有与之对应的进程(因为它未执行),也有
可能有多个进程与之对应(运行在几个不同的数据集上)
(3)进程还具有并发性和交往性,这也与程序的封闭性不同。进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统
对应用的并发性。
·进程与线程区别与联系
(1)划分尺度:一个程序至少有一个进程,一个进程至少有一个主线程,线程更小,所以多线程程序并发性更高
(2)资源分配、处理器调度:进程是资源分配的基本单位,线程是处理器调度的基本单位
(3)地址空间:进程拥有独立的地址空间,线程没有独立的地址空间,同一进程内多个线程共享资源,从而极大地提高了程序的运行效率
(4)执行:每个独立的线程都有一个程序运行的入口,顺序执行序列和程序的出口,但线程不能单独执行,必须依存于应用程序中,由应用
程序提供多个线程执行控制。
五、参考
多线程与单线程的区别 http://blog.csdn.net/douglax/article/details/1532258
程序、进程、线程区别与联系 http://www.cnblogs.com/aquarius-bear/p/3939939.html
主频:CPU内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度
外频:系统基本时间
主频 = 外频 * 倍频
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有
系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享
进程所拥有的全部资源,一个线程可创建和撤销另一个线程,同一个进程中的多个线程之间可并发执行。
二、入门
多线程编程目的:最大限度地利用CPU资源。在一个进程内有多个线程,使一个应用程序有了多任务功能。每个进程都有独立的数据和代码空间。
单个CPU,在未开启超线程情况下,在同一时间只能执行一个线程,增加多任务只能通过每个进程或线程获得一个时间片,在某个时间片内只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片
很短,给用户的感觉同时有好多线程在执行,但是线程切换是有代价的,如果采用多进程,那就需要将线程所属该进程所需要的内存进行切换,这时间代价很大,但线程切换代价就很少,线程可以
共享内存,所以采用多线程在切换上花费比多进程少的多,但是线程切换还是需要时间消耗,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即
采用多线程不会提高程序的执行速度,反而会降低速度,但对于用户来说可以减少用户的响应时间。
多个CPU或CPU采用超线程技术,采用多线程技术会提高程序的执行速度,因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。
三、区别与联系
从逻辑角度来看,多线程意义在于一个应用程序中,有多个执行部分可同时执行,但操作系统并没有将多个线程看作多个独立的应用,来实现进程的
调度和管理以及资源分配,这是进程和线程的重要区别。
·进程与程序区别与联系
(1)程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态的实体。而进程不同,它是程序在某个数据集上的执行,
是一个动态的实体,它有自己的生命周期,它因创建而产生,因调度而运行,因等待资源或时间而被处于等待状态,因完成任务而被撤销,
反映了一个程序在一定的数据集上运行的全部动态过程。
(2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程,而这一点正是
程序无法做到的,由于程序没有和数据产生直接的联系,即使是执行不同的数据程序,他们指令集合依然是一样的,所以无法唯一地标识出这些运行
于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个,而一个程序可能没有与之对应的进程(因为它未执行),也有
可能有多个进程与之对应(运行在几个不同的数据集上)
(3)进程还具有并发性和交往性,这也与程序的封闭性不同。进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统
对应用的并发性。
·进程与线程区别与联系
(1)划分尺度:一个程序至少有一个进程,一个进程至少有一个主线程,线程更小,所以多线程程序并发性更高
(2)资源分配、处理器调度:进程是资源分配的基本单位,线程是处理器调度的基本单位
(3)地址空间:进程拥有独立的地址空间,线程没有独立的地址空间,同一进程内多个线程共享资源,从而极大地提高了程序的运行效率
(4)执行:每个独立的线程都有一个程序运行的入口,顺序执行序列和程序的出口,但线程不能单独执行,必须依存于应用程序中,由应用
程序提供多个线程执行控制。
四、多线程编程
五、参考
多线程与单线程的区别 http://blog.csdn.net/douglax/article/details/1532258
程序、进程、线程区别与联系 http://www.cnblogs.com/aquarius-bear/p/3939939.html
1 0
- 【编程优化】单线程、多线程基础(更新中)
- 多线程编程基础(线程创建)
- 多线程编程基础(线程创建)
- Netty学习之一--Java socket编程(单线程+多线程)
- Java socket编程(单线程socket,多线程socket)
- linux 学习- 编程基础之多线程编程(创建多线程)
- 编程小技巧-基础(更新中。。。)
- 使用线程池优化多线程编程
- Posix多线程编程学习笔记(一)—线程基础
- java中单线程和多线程
- Java Socket:单线程/多线程/线程池ServerSocket编程
- 多线程编程指南1--线程基础
- Java多线程编程基础之线程对象
- Java多线程编程基础之线程对象
- Posix多线程编程(1)—线程基础
- Posix 多线程编程—线程基础
- Java多线程编程基础之线程对象
- Java多线程编程基础之线程对象
- 基于seq2seq的中国古诗词自动生成技术
- 获取实时股票行情数据
- 解决华为手机不出现logcat日志的问题,华为手机logcat日志
- Ionic2如何下拉刷新和上拉加载
- Git关于pull,commit,push的总结
- 【编程优化】单线程、多线程基础(更新中)
- ERP,CRM和OA的区别和联系
- flex布局中align-content和align-items的区别
- iOS 动态库和静态库的的区别 动态库的隔离与静态库的吸附问题以及解决方法
- 蓝桥杯:错误票据
- spring的困惑--org.springframework.web.servlet.DispatcherServlet noHandlerFound
- SQL语句映射文件(2)增删改查、参数、缓存
- 大数定律
- css的px,em,rem的区别