多线程:原理分析整理

操做系统的设计,能够归结为三点:

  • (1)以多进程形式,容许多个任务同时运行;
  • (2)以多线程形式,容许单个任务分红不一样的部分运行;
  • (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另外一方面容许进程之间和线程之间共享资源。

多核多处理器(多CPU)多线程

  • 多核:几核就是真的有几个物理核心。CPU的性能主要靠提升核心工做频率来提升,因为物理限制,不能把频率无限提升,因此发展出多核心的CPU。即一枚处理器上集成多个计算引擎(内核),共享缓存、内存、寄存器。A8处理器是一款双核处理器。
  • 多处理器:包含多个CPU,CPU之间共享内存、I/O设备、控制器、外部设备,整个硬件系统由统一的操做系统控制,在处理器和程序之间实现做业、任务、程序、数组及其元素各级的全面并行。目前主流的服务器架构,超级计算机,都是多CPU多核架构。
  • 多线程:线程就是咱们为了让一个进程可以同时干多件事情而发明的“分身术”,拥有最小系统资源,共享进程资源的基本调度单位。核是物理的,线程是虚拟的,双核4线程,看起来很像4核,但比真实的4核4线程慢,却比双核双线程快。

进程VS线程

进程

就是进行中的程序(一组指令的有序集合),当一个程序被加载到内存中以后就变成了进程(进程=程序+执行)。进程有独立的地址空间,在保护模式下本身出了问题不会对其余进程产生影响。进程是操做系统分配资源的基本单位。 进程的三种状态:html

  • 阻塞态:等待某个事件的完成
  • 就绪态:等待系统分配CPU以便运行
  • 执行态:占有CPU正在运行

线程

是进程的一个实体,是CPU调度和分派的基本单位,本身拥有一点运行必不可少的资源(如程序计数器、一组寄存器和堆栈)与同属进程的其余线程共享进程的拥有的所有资源。 面试

进程与线程区别

  • 进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。
  • 一个程序至少有一个进程,一个进程至少有一个线程。线程依赖于进程才能运行
  • 线程自己拥有不多资源(线程标识符、程序计数器、一组寄存器的值、堆栈),与同属进程的其余线程共享进程拥有的资源(代码段、数据段、打开的文件、I/O设备等)。
  • 线程开销小,但一个线程死掉等于整个进程死掉,不利于资源管理和保护。而进程正好相反,开销大,但相对线程安全。

引入线程带来的主要好处:

之前进程既是资源分配也是调度的最小单位,后来为了更合理的使用cpu(其实是cpu性能愈来愈好),才将资源分配和调度分开,就有了线程线程是创建在进程的基础上的一次程序运行单位。数组

  • 在进程内建立、终止线程比建立、终止进程快
  • 同一进程内切换线程比切换进程要快,尤为是用户级的线程切换。

线程操做系统来讲就是一段代码+运行时数据(主要是寄存器数据,还有线程中与资源相关的数据,好比打开的文件句柄)。多线程实现主要是靠硬件CPU(中央处理器)件来实现的,CPU有一个很重要的特性时间片,每一段得到CPU的代码只能运行一个时间片限定的时间,时间到后CPU就会把正在运行的代码暂停,接着发生一个中断,而后按照必定的规则选择另外一段代码得到CPU来运行。缓存

时间片设得过短会致使过多的进程切换,下降了CPU效率;而设得太长又可能引发对短的交互请求的响应变差。将时间片设为100毫秒一般是一个比较合理的折衷。安全

线程越多越好吗

线程多了,能够提升程序的执行效率,但并非越多越好。服务器

  • 虽然线程自己拥有不多的资源(在iOS中,默认主线程1M,子线程512K),可是更多的线程意味着更多的内存开销。建立线程也是须要CPU开销的。
  • 若是线程比核的数量多,则同一时间只能执行与核数量相等的线程数,线程过多会致使频繁的切换,消耗过多的CPU时间,下降了程序性能。
  • 使用多线程就可能出现线程安全问题,为了解决线程安全须要使用锁,进而可能会出现死锁问题。过多的线程会增长程序设计的复杂性,浪费更多精力去处理多线程通讯和数据共享(多线程安全、多线程死锁)。

参考博客

浅析操做系统的进程、线程区别多线程

操做系统核心原理-3.进程原理(上):进程概要架构

多线程-概述及底层实现机制浅析性能

操做系统面试总结—进程线程操作系统

腾讯面试题04.进程和线程的区别?

相关文章
相关标签/搜索